我是一个新手软件开发者,目前正在处理一个涉及到与带有Bearer Token的事务服务器进行API调用的项目。
我已经通过命令行了解了如何通过curl调用API。它看起来像这样(由于我使用的是测试服务器,该测试服务器仅支持http请求,因此使用http而不是https)
curl http://api.testwebsite.com/transactions/ \
-H "Authorization: Bearer <TOKEN ID>" \
-d amount=500 \
-d currency="USD" \
-d card_number="<card number>" \
-d card_exp_month=<exp month> \
-d card_exp_year=<exp year> \
-d card_cvv="<card's ccv>"
现在我正在使用Java编写一个程序(必须是Java),只能使用本地的Java库(不能使用Spring或Apache等第三方包),并尝试通过HttpUrlConnection调用API。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.DataOutputStream;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import java.net.HttpURLConnection;
public class TestHttpsPost {
public static void main(String[] args) throws Exception {
// Uncomment one of these next two lines:
URL url = new URL("http://api.testwebsite.com/transactions");
//URL url = new URL("https://httpbin.org/post"); // good for testing
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
// Change this to a valid token:
connection.setRequestProperty("Authorization", "Bearer <TOKEN ID>");
/*
connection.setRequestProperty("amount", "500");
connection.setRequestProperty("currency", "USD");
connection.setRequestProperty("card_number", "<CARD_NUMBER>");
connection.setRequestProperty("card_exp_month", "<EXP_MONTH>");
connection.setRequestProperty("card_exp_year", "<EXP_YEAR");
connection.setRequestProperty("card_cvv", "<CCV>");
*/
String jsonData1 = "amount=500";
String jsonData2 = "currency=\"USD\"";
String jsonData3 = "card_number=\"11111111111111111\"";
String jsonData4 = "card_exp_month=11";
String jsonData5 = "card_exp_year=2011";
String jsonData6 = "card_cvv=\"123\"";
try {
// Post the data:
DataOutputStream output = new DataOutputStream(connection.getOutputStream());
output.writeBytes(jsonData1);
output.writeBytes(jsonData2);
output.writeBytes(jsonData3);
output.writeBytes(jsonData4);
output.writeBytes(jsonData5);
output.writeBytes(jsonData6);
output.close();
// Read the response:
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Response code:" + connection.getResponseCode());
System.out.println("Response message:" + connection.getResponseMessage());
}
}
但我一直收到以下错误信息:
Server returned HTTP response code: 400 for URL: http://api.testwebsite.com/transactions
Response code:400
Response message:Bad Request
我遵循了在Java中将PayPal curl请求转换为http请求,但是PayPal API 的字段相当不同,我不确定是否有任何问题。
提前致谢!