我正在尝试获取访问 token ,但它给出 401 Unauthorize 错误,但在curl 中使用相同的 clientid 和 key 它可以工作。请参阅下面的代码,我尝试使用 DataConverter 将客户端和 key 转换为 Base 64,但遇到了相同的输出。
try {
String u = <client id>;
String p = <secret>;
String tokenInput = "grant_type=client_credentials";
System.setProperty("https.protocols", "TLSv1.1,TLSv1.2,SSLv3,SSLv2Hello");
java.net.URL url = new java.net.URL("https://api.sandbox.paypal.com/v1/oauth2/token");
java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();
String up = u + ":" + p;
//String r = new String(javax.xml.bind.DatatypeConverter.parseBase64Binary(u));
//String s = new String(javax.xml.bind.DatatypeConverter.parseBase64Binary(p));
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Basic " + up);
conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(tokenInput.length()));
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Accept-Language", "en_US");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setUseCaches(false);
conn.setDoOutput(true);
java.io.DataOutputStream output = new java.io.DataOutputStream(conn.getOutputStream());
output.write(tokenInput.getBytes());
output.close();
// Read the response:
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
System.out.println("Response code:" + conn.getResponseCode());
System.out.println("Response message:" + conn.getResponseMessage());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
最佳答案
也许有点晚了,但我遇到了同样的问题,也许有人也需要这个。
对我来说,它可以使用 Base64 对 client_id 进行编码并加密
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
String up = u + ":" + p;
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Basic " + new String(new org.apache.commons.codec.binary.Base64().encode(up.getBytes())));
conn.setRequestProperty("Content-Length", Integer.toString(tokenInput.length()));
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Accept-Language", "en_US");
conn.setUseCaches(false);
conn.setDoOutput(true);
关于java - 将paypal的curl获取访问 token 请求转换为Java中的http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43799009/