Как получить тело ответа http в виде строки в Java? - PullRequest
133 голосов
/ 24 апреля 2011

Я знаю, что раньше был способ получить его с помощью Apache Commons, как описано здесь: http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html и пример здесь:

http://www.kodejava.org/examples/416.html

но я считаю, что это устарело. Есть ли другой способ сделать http get запрос в Java и получить тело ответа в виде строки, а не потока?

Ответы [ 12 ]

0 голосов
/ 12 декабря 2018

Ниже приведен фрагмент кода, который показывает лучший способ обработки тела ответа в виде строки, будь то действительный ответ или ответ об ошибке для запроса HTTP POST:

BufferedReader reader = null;
OutputStream os = null;
String payload = "";
try {
    URL url1 = new URL("YOUR_URL");
    HttpURLConnection postConnection = (HttpURLConnection) url1.openConnection();
    postConnection.setRequestMethod("POST");
    postConnection.setRequestProperty("Content-Type", "application/json");
    postConnection.setDoOutput(true);
    os = postConnection.getOutputStream();
    os.write(eventContext.getMessage().getPayloadAsString().getBytes());
    os.flush();

    String line;
    try{
        reader = new BufferedReader(new InputStreamReader(postConnection.getInputStream()));
    }
    catch(IOException e){
        if(reader == null)
            reader = new BufferedReader(new InputStreamReader(postConnection.getErrorStream()));
    }
    while ((line = reader.readLine()) != null)
        payload += line.toString();
}       
catch (Exception ex) {
            log.error("Post request Failed with message: " + ex.getMessage(), ex);
} finally {
    try {
        reader.close();
        os.close();
    } catch (IOException e) {
        log.error(e.getMessage(), e);
        return null;
    }
}
0 голосов
/ 18 сентября 2017

Вот простой способ сделать это:

String responseString = "";
for (int i = 0; i < response.getEntity().getContentLength(); i++) { 
    responseString +=
    Character.toString((char)response.getEntity().getContent().read()); 
}

Конечно, responseString содержит ответ веб-сайта и ответ типа HttpResponse, возвращаемый HttpClient.execute(request)

...