您好我有以下卷曲脚本
curl -i -X PUT -d "{\"loginList\":[{\"externalLoginKey\":\"1406560803453iGBoMm\",\"testStatus\":\"R\"}]}" -H "X-test-debug-override: true" -k http://someapi/logins
我正在尝试使用java做一个Http帖子。以下是我的代码。难道我做错了什么?我收到错误,但卷曲运行正常
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpTesting {
public static void main(String[] args) throws Exception {
String apiURL = "http://someapi/logins";
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
String str = "{\"loginList\":[{\"externalLoginKey\":\"1406565099034jZrHXe\",\"testStatus\":\"R\"}]}";
con.disconnect();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("X-test-debug-override", "true");
con.connect();
OutputStream outStream = con.getOutputStream();
DataOutputStream out = new DataOutputStream(outStream);
out.writeBytes(str);
out.flush();
out.close();
int responseCode = con.getResponseCode();
System.out.println(responseCode);
}
}
答案 0 :(得分:3)
- -d, - data< data>
(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像用户填写HTML表单并按下提交按钮时浏览器一样。这将导致curl使用content-type application / x-www-form-urlencoded将数据传递到服务器。与-F, - form进行比较。
(强调我的。)
即使您要发送JSON,您的内容类型也需要为"application/x-www-form-urlencoded"
。这意味着您还需要使用URLEncoder对数据进行编码:
out.writeBytes(URLEncoder.encode(str, "UTF-8"));
顺便说一下,当您的Java代码使用curl
方法时,"POST"
命令使用PUT方法。