2013-09-28 2 views
0

Я пытаюсь получить данные из API через HttpURLConnection но получать IOException с сообщением:HttpURLConnection возвращает -1 в качестве кода ответа

Invalid Http response 

Однако, когда я вставить запрос URL в браузер я» m получить правильный ответ с 200 в качестве кода ответа. Вот код, который не подходит:

public static String sendRequest(String url) throws IOException { 
    HttpURLConnection urlConnection = null; 
    String out = null; 
    System.setProperty("http.keepAlive", "false"); 
    try { 
     URL serverAddress = new URL(url); 
     urlConnection = (HttpURLConnection) serverAddress.openConnection(); 
     urlConnection.setReadTimeout(TIME_OUT_LENGTH); 
     urlConnection.setRequestMethod(REQUEST_METHOD_GET); 
     InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
     out = Connection.readStream(in); 
    } catch (IOException e) { 
     System.out.println(e.getCause()); 
     InputStream is = new BufferedInputStream(urlConnection.getErrorStream()); 
     out = Connection.readStream(is); 
    } finally { 
     urlConnection.disconnect(); 
     System.out.println(out); 
     return out; 
    } 
} 

private static String readStream(InputStream in) throws IOException { 
    String line; 
    BufferedReader r = new BufferedReader(new InputStreamReader(in)); 
    StringBuilder sb = new StringBuilder(); 
    while((line = r.readLine()) != null) 
     sb.append(line); 
    return sb.toString(); 
} 

Кто-нибудь видит, что я делаю неправильно?

--- EDIT ----

Стек след:

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1341) 
at java.net.URL.openStream(URL.java:1037) 
at com.urhola.cheddar.connection.Connection.sendRequest(Connection.java:33) 
at com.urhola.cheddar.request.Request.execute(Request.java:63) 
at com.urhola.cheddar.request.LineInformationRequest.execute(LineInformationRequest.java:36) 
at tester.Client.main(Client.java:54) 

ответ

0

Хорошо, я переключился на Apaches HTTP client и бросил исключение говоря параметры URL недействительны. Поэтому я проверил и заметил, что отправляю параметры (которые часто включают пробелы) без их кодирования. После параметров кодирования (пример ниже) все работало красиво.

URLEncoder.encode(parameter, "UTF-8"); 
Смежные вопросы