2017-02-22 44 views
0

У меня есть следующий CURL запрос Может кто-нибудь, пожалуйста, подтвердите мне, что было бы subesquest HTTP RequestПреобразование CURL запроса на HTTP запрос Java

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

Я имею в виду, что лучше использовать существующую библиотеку в java, например: https://github.com/libetl/curl – Grzesiek

+0

Я замечаю комментарий на странице http://wiki.vg/Talk:Mojang_API: «Как именно должно полезная нагрузка выглядит? Независимо от того, что я отправляю (даже данные мусора), я возвращаю HTTP-ответ 403 с '{" error ":" Forbidden "," errorMessage ":" Current IP not secure "}'. Вы пытались запустить предлагаемую команду 'curl', и она дает вам ответ, который вы ожидаете? Или он вместо этого также дает вам 403? Вы можете добавить к нему '-i', чтобы увидеть код состояния и заголовки ответа:' curl -i -H 'Authorization: Bearer "...' – sideshowbarker

ответ

0

Вы устанавливаете свойства, но следует указать заголовки.

+0

и как я могу это сделать? – MoisesCol

+0

@MoisesCol кажется, что я неправ. Пожалуйста, проверьте http://stackoverflow.com/questions/12732422/adding-header-for-httpurlconnection –

+0

Не полезно, но спасибо. – MoisesCol

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 -assuming другого кода (не показан в вопросе) устанавливает 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. Я бы предположил, что это так, но опять же, кто знает.

+0

Фактический API, который я пытаюсь использовать, можно найти здесь http://wiki.vg/Mojang_API#Change_Skin. Я обновлю вопрос своим примером – MoisesCol

+0

Их пример - это то, что я сортирую, пытаюсь реплицировать с помощью Java – MoisesCol