Ответ 1
Вы можете использовать EntityUtils#toString()
для этого.
// ...
HttpResponse response = client.execute(get);
String responseAsString = EntityUtils.toString(response.getEntity());
// ...
Я только что начал использовать Apache HTTP Client library и заметил, что не было встроенного метода получения ответа HTTP как String. Я просто хочу получить его как String, чтобы передать его любой библиотеке разбора, которую я использую.
Каков рекомендуемый способ получения ответа HTTP как строки? Здесь мой код, чтобы сделать запрос:
public String doGet(String strUrl, List<NameValuePair> lstParams) {
String strResponse = null;
try {
HttpGet htpGet = new HttpGet(strUrl);
htpGet.setEntity(new UrlEncodedFormEntity(lstParams));
DefaultHttpClient dhcClient = new DefaultHttpClient();
PersistentCookieStore pscStore = new PersistentCookieStore(this);
dhcClient.setCookieStore(pscStore);
HttpResponse resResponse = dhcClient.execute(htpGet);
//strResponse = getResponse(resResponse);
} catch (ClientProtocolException e) {
throw e;
} catch (IOException e) {
throw e;
}
return strResponse;
}
Вы можете использовать EntityUtils#toString()
для этого.
// ...
HttpResponse response = client.execute(get);
String responseAsString = EntityUtils.toString(response.getEntity());
// ...
Вам нужно использовать тело ответа и получить ответ:
BufferedReader br = new BufferedReader(new InputStreamReader(httpresponse.getEntity().getContent()));
И затем прочитайте его:
String readLine;
String responseBody = "";
while (((readLine = br.readLine()) != null)) {
responseBody += "\n" + readLine;
}
Теперь responseBody содержит ваш ответ в виде строки.
(Не забудьте закрыть BufferedReader в конце: br.close()
)
Вы можете сделать что-то вроде:
Reader in = new BufferedReader(
new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
Используя читатель, вы сможете построить свою строку. Но если вы используете SAX, вы можете напрямую передать поток парсеру. Таким образом, вам не придется создавать строку, и ваш объем памяти будет ниже.
В терминах краткости кода он может использовать Fluent API, как это:
import org.apache.http.client.fluent.Request;
[...]
String result = Request.Get(uri).execute().returnContent().asString();
Документация предупреждает, хотя этот подход не идеален с точки зрения потребления памяти.