2012-08-23 12 views
16

Apache'nin HTTP İstemcisi kitaplığını kullanmaya başladım ve HTTP yanıtını bir Dize olarak almanın yerleşik bir yöntemi olmadığını fark ettim. Ben sadece onu String olarak almayı düşünüyorum, böylece kullandığım ayrıştırma kütüphanesine aktarabilirim.Apache'nin HTTP İstemcisi kullanılırken HTTP yanıtını String olarak almanın önerilen yolu nedir?

HTTP yanıtını String olarak almanın önerilen yolu nedir? Bunun için EntityUtils#toString() kullanabilirsiniz

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; 

} 

cevap

44

: Burada istek yapmak benim kod. Okumak sonra

BufferedReader br = new BufferedReader(new InputStreamReader(httpresponse.getEntity().getContent())); 

Ve:

String readLine; 
String responseBody = ""; 
while (((readLine = br.readLine()) != null)) { 
    responseBody += "\n" + readLine; 
} 

responseBody şimdi dize olarak yanıtınızı içeren

// ... 
HttpResponse response = client.execute(get); 
String responseAsString = EntityUtils.toString(response.getEntity()); 
// ... 
+1

Bu cevap HttpClient için gitmek için yoldur. Apache Jersey, bence, HttpClient ile çalışmak çok daha kolay. –

+1

@Paul: "Apache Jersey" ile ne demek istediğinden emin değilim. Apache projesinde böyle bir şey yok. ["Jersey"] (http://jersey.java.net), bir HTTP istemcisi olmayan JAX-RS API'sinin Sun/Oracle referans uygulamasıdır. – BalusC

+1

Üzgünüm, güneş/oracle'nin formasını kastediyorum. Daha akıcı bir API ile bir http istemcisi içerir. –

5

Sen tepki gövdesini tüketmek ve yanıt almak gerekir.

(sonunda BufferedReader kapatmayı unutmayın: br.close())

1

Sen gibi bir şey yapabilirsiniz: okuyucu kullanma

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

Eğer dizesi oluşturmak mümkün olacaktır. Ancak SAX kullanıyorsanız, akışı doğrudan çözümleyiciye verebilirsiniz. Bu şekilde dizeyi oluşturmanız gerekmeyecek ve bellek ayak iziniz de daha düşük olacaktır. kodun özlü açısından

0

böyle Fluent API kullanıyor olabilir: bu yaklaşım bellek tüketimi açısından ideal olmadığını olsa

import org.apache.http.client.fluent.Request; 
[...] 
String result = Request.Get(uri).execute().returnContent().asString(); 

dokümantasyon uyarır.

İlgili konular