我有以下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
答案 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)
您正在设置属性,但应指定标题。