2015-04-25 3 views
1

У меня есть этот cURL запрос:новообращенный локон запрос в URLConnection

curl -H 'Accept: application/vnd.twitchtv.v3+json' -H 'Authorization: OAuth <access_token>' \ 
-X PUT https://api.twitch.tv/kraken/users/<bot_name>/follows/channels/<channel_name> 

Мне нужно, чтобы превратить его в URLConnection запроса Java. Это то, что у меня есть до сих пор:

String url = "https://api.twitch.tv/kraken/?oauth_token=" + bot.botOAuth.substring("oauth:".length()); 

URL obj = new URL(url); 
HttpURLConnection conn = (HttpURLConnection) obj.openConnection(); 

conn.setRequestProperty("Content-Type", "application/json"); 
conn.setDoOutput(true); 

conn.setRequestMethod("PUT"); 

OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); 
out.write("https://api.twitch.tv/kraken/users/" + bot.botName + "/follows/channels/" + gamrCorpsTextField.getText()); 
out.close(); 

new InputStreamReader(conn.getInputStream()); 

Любая помощь будет оценена!

ответ

1

URL, вы собираетесь открыть в этом коде:

String url = "https://api.twitch.tv/kraken/?oauth_token=" + bot.botOAuth.substring("oauth:".length()); 

не совпадает с curl запроса URL:

https://api.twitch.tv/kraken/users/<bot_name>/follows/channels/<channel_name> 

Похоже, вы хотите что-то больше, как это:

URL requestUrl = new URL("https://api.twitch.tv/kraken/users/" + bot.botName 
     + "/follows/channels/" + gamrCorpsTextField.getText()); 
HttpURLConnection connection = (HttpUrlConnection) requestUrl.openConnection(); 

connection.setRequestMethod("PUT"); 
connection.setRequestProperty("Accept", "application/vnd.twitchtv.v3+json"); 
connection.setRequestProperty("Authorization", "OAuth <access_token>"); 
connection.setDoInput(true); 
connection.setDoOutput(false); 

Это устанавливает «URLConnection запрос», эквивалентный запросу 012 Командавыдает, как и требовалось. Оттуда вы получаете код ответа, читаете заголовки ответов и тело и т. Д. Через объект connection.

+0

Спасибо! Я добавил 'connection.setRequestProperty (" Content-Length ", connection.getContentLength() +" ");' также, но теперь он бросает ошибку 'java.lang.IllegalStateException: Already connected'. Любая идея почему? –

+0

Вы не можете больше устанавливать свойства запроса после выполнения любой операции, требующей отправки HTTP-запроса. Одной из таких операций является 'getContentLength()', поскольку она возвращает длину содержимого * response *. В любом случае вам не нужно напрямую устанавливать длину содержимого запроса *. Просто используйте 'doOutput (true)' и напишите тело запроса через 'OutputStream' соединения. –

Смежные вопросы