尝试使用Java Http URL连接来执行curl命令

时间:2014-07-28 17:22:54

标签: java http curl

您好我有以下卷曲脚本

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);

}

}

1 个答案:

答案 0 :(得分:3)

来自curl man page

    -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方法。