17

Apache の HTTP クライアント ライブラリを使い始めたばかりですが、HTTP 応答を文字列として取得する組み込みメソッドがないことに気付きました。使用している解析ライブラリに渡すことができるように、文字列として取得しようとしています。

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;

}
4

4 に答える 4

49

これに使えますEntityUtils#toString()

// ...
HttpResponse response = client.execute(get);
String responseAsString = EntityUtils.toString(response.getEntity());
// ...
于 2012-08-23T20:04:23.297 に答える
5

応答本文を消費して応答を取得する必要があります。

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():)

于 2012-08-23T20:08:13.983 に答える
1

あなたは次のようなことをすることができます:

Reader in = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

リーダーを使用すると、文字列を作成できます。ただし、SAXを使用している場合は、ストリームをパーサーに直接渡すことができます。このようにすると、文字列を作成する必要がなくなり、メモリフットプリントも低くなります。

于 2012-08-23T20:08:55.893 に答える