将CURL请求转换为HTTP请求Java

时间:2017-02-22 18:03:48

标签: java curl httprequest

我有以下CURL请求任何人都可以请确认我的子请求HTTP请求

curl -H "Authorization: Bearer <access token>" --data-urlencode "model=" --data-urlencode "imageurl.img.com" apiurl.api.com

我尝试了什么:

HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);


conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", "Bearer " + token);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

String payload = "model=\"\"&url=" + url;

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
writer.write(payload);
writer.close();

问题是我一直收到403 HTTP错误代码。 它适用于CURL,因此我可能无法正确转换它。

我可以做些什么来进行转换?

@EDIT

API:http://wiki.vg/Mojang_API#Change_Skin Mojang的例子:

curl -H "Authorization: Bearer <access token>" --data-urlencode "model=" --data-urlencode "url=http://assets.mojang.com/SkinTemplates/steve.png" https://api.mojang.com/user/profile/<uuid>/skin

2 个答案:

答案 0 :(得分:1)

问题中的curl调用导致POST正文为model=&imageurl.img.com

$ curl --trace-ascii - -H "Authorization: Bearer <access token>" \
  --data-urlencode "model=" --data-urlencode "imageurl.img.com" https://example.com

=> Send header, 183 bytes (0xb7)
0000: POST / HTTP/1.1
0011: Host: example.com
0024: User-Agent: curl/7.51.0
003d: Accept: */*
004a: Authorization: Bearer <access token>
0070: Content-Length: 23
0084: Content-Type: application/x-www-form-urlencoded
00b5:
=> Send data, 23 bytes (0x17)
0000: model=&imageurl.img.com
== Info: upload completely sent off: 23 out of 23 bytes

具体而言,curl调用不包含url=参数。

相反,Java似乎导致POST正文为model=""&url=imageurl.img.com - 假设其他代码(未在问题中显示)将url变量设置为imageurl.img.com

我想这可能是因为没有代码将url变量设置为imageurl.img.com。没有办法从问题的片段中分辨出来。

此外,curl调用会发送标头Accept: */*,而Java代码则会发送标头Accept: application/json。我不认为这会导致403,但谁知道。

此外,curl调用发送User-Agent: curl/7.51.0标头,但不清楚Java代码是否导致发送User-Agent标头。我认为它是,但又一次,谁知道。

答案 1 :(得分:0)

您正在设置属性,但应指定标题。