尝试使用JavaHTTPURL连接执行curl命令
嗨,我有下面的卷曲脚本尝试使用JavaHTTPURL连接执行curl命令,java,http,curl,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 post。下面是我的代码。我做错什么了吗?我得到错误,但卷曲运行良好 import java.io.Data
curl -i -X PUT -d "{\"loginList\":[{\"externalLoginKey\":\"1406560803453iGBoMm\",\"testStatus\":\"R\"}]}" -H "X-test-debug-override: true" -k http://someapi/logins
我正在尝试使用java编写Http post。下面是我的代码。我做错什么了吗?我得到错误,但卷曲运行良好
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);
}
}
从:
-d、 --数据
(HTTP)将POST请求中的指定数据发送到HTTP服务器,其方式与浏览器在用户填写HTML表单并按下提交按钮时的方式相同。这将导致curl使用内容类型应用程序/x-www-form-urlencoded将数据传递给服务器。与-F,--form进行比较。 (我的重点。) 即使您正在发送JSON,您的内容类型也需要是
“application/x-www-form-urlencoded”
。这意味着您还需要使用以下方式对数据进行编码:
顺便说一句,您的curl
命令使用PUT方法,而Java代码使用“POST”
方法
-d、 --数据
(HTTP)将POST请求中的指定数据发送到HTTP服务器,其方式与浏览器在用户填写HTML表单并按下提交按钮时的方式相同。这将导致curl使用内容类型应用程序/x-www-form-urlencoded将数据传递给服务器。与-F,--form进行比较。 (我的重点。) 即使您正在发送JSON,您的内容类型也需要是
“application/x-www-form-urlencoded”
。这意味着您还需要使用以下方式对数据进行编码:
顺便说一句,您的curl
命令使用PUT方法,而Java代码使用“POST”
方法
-d、 --数据
(HTTP)将POST请求中的指定数据发送到HTTP服务器,其方式与浏览器在用户填写HTML表单并按下提交按钮时的方式相同。这将导致curl使用内容类型应用程序/x-www-form-urlencoded将数据传递给服务器。与-F,--form进行比较。 (我的重点。) 即使您正在发送JSON,您的内容类型也需要是
“application/x-www-form-urlencoded”
。这意味着您还需要使用以下方式对数据进行编码:
顺便说一句,您的curl
命令使用PUT方法,而Java代码使用“POST”
方法
-d、 --数据
(HTTP)将POST请求中的指定数据发送到HTTP服务器,其方式与浏览器在用户填写HTML表单并按下提交按钮时的方式相同。这将导致curl使用内容类型应用程序/x-www-form-urlencoded将数据传递给服务器。与-F,--form进行比较。 (我的重点。) 即使您正在发送JSON,您的内容类型也需要是
“application/x-www-form-urlencoded”
。这意味着您还需要使用以下方式对数据进行编码:
顺便说一句,您的
curl
命令使用PUT方法,而Java代码使用“POST”
方法。您遇到了什么错误?如果您遇到异常,请在问题中包含完整的堆栈跟踪。另外,您可能不应该在即将使用的HttpURLConnection上调用con.disconnect()
。@VGR我收到一个400(错误请求)您是否在curl请求中放入了accept头?您收到了什么错误?如果您遇到异常,请在问题中包含完整的堆栈跟踪。另外,您可能不应该在即将使用的HttpURLConnection上调用con.disconnect()
。@VGR我收到一个400(错误请求)您是否在curl请求中放入了accept头?您收到了什么错误?如果您遇到异常,请在问题中包含完整的堆栈跟踪。另外,您可能不应该在即将使用的HttpURLConnection上调用con.disconnect()
。@VGR我收到一个400(错误请求)您是否在curl请求中放入了accept头?您收到了什么错误?如果您遇到异常,请在问题中包含完整的堆栈跟踪。另外,您可能不应该在即将使用的HttpURLConnection上调用con.disconnect()
。@VGR我收到一个400(错误的请求),您是否在curl请求中放入了accept头?
out.writeBytes(URLEncoder.encode(str, "UTF-8"));