我试图通过为Twitter编写一个快速简单的oauth2连接来快速浏览Java,但是当我尝试使用setRequestProperty来请求头文件时,我遇到了这种非常奇怪的行为。
例如,如果我运行以下代码来添加名为“Authorization”的请求标头:
connection.setRequestProperty("Authorization", b64Keys);
我的请求标题将按原样打印,并且“Authorization”标题将丢失:
{grant_type = [client_credentials] 内容类型= [应用/ X WWW的窗体-urlencoded;字符集= UTF-8]}
但是如果我将密钥的名称更改为“Authorizations”或“test”(或其他任何东西),则setRequestPropert函数实际上会添加标头。这样做会产生以下输出:
{授权= [基本 WVE0UzNJcmVKUEMYSECRETBASE64CODE2MxWkRNcnNiMg ==] grant_type = [client_credentials] 内容类型= [应用/ X WWW的窗体-urlencoded;字符集= UTF-8]}
以下是完整的方法:
public String createRequest() throws IOException {
String tokenBaseURL = "https://api.twitter.com/oauth2/token",publicKey= "",privateKey = "";
String charset = "UTF-8";
privateKey = "PRIVATEKEY";
publicKey = "PUBLICKEY";
String keyString = publicKey + ":" + privateKey;
String b64Keys = "Basic "+Base64.getEncoder().encodeToString(keyString.getBytes());
System.out.println(b64Keys);
URL url = new URL(tokenBaseURL);
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", b64Keys);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
connection.setRequestProperty("grant_type","client_credentials");
System.out.println(connection.getRequestProperties().toString());
connection.setDoOutput(true); // Triggers xsPOST.
return connection.getContent().toString();
}
我有什么遗漏或者这可能是一个错误吗?我需要能够添加一个名为“Authorization”的密钥的请求标头