2012-08-23 7 views
16

मैंने अपाचे की HTTP क्लाइंट लाइब्रेरी का उपयोग शुरू कर दिया है और देखा है कि स्ट्रिंग के रूप में HTTP प्रतिक्रिया प्राप्त करने की अंतर्निहित विधि नहीं थी। मैं इसे स्ट्रिंग के रूप में प्राप्त करने के लिए देख रहा हूं ताकि मैं इसे जो भी पार्सिंग लाइब्रेरी का उपयोग कर रहा हूं उसे पास कर सकूं।अपाचे के 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; 

} 

उत्तर

44

आप इसके लिए EntityUtils#toString() का उपयोग कर सकते हैं।

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

यह उत्तर HttpClient के लिए जाने का तरीका है। Apache जर्सी, मेरी राय में, HttpClient से काम करने के लिए बहुत आसान है। –

+1

@ पॉल: मुझे यकीन नहीं है कि "अपाचे जर्सी" के साथ आपका क्या मतलब है। अपाचे परियोजना में ऐसी कोई बात नहीं है। ["जर्सी"] (http://jersey.java.net) जेएक्स-आरएस एपीआई का सूर्य/ओरेकल संदर्भ कार्यान्वयन है जो एक HTTP क्लाइंट नहीं है। – BalusC

+1

क्षमा करें, मेरा मतलब सूर्य/ओरेकल की जर्सी है। इसमें एक अधिक क्लाइंट एपीआई वाला एक http क्लाइंट है। –

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

1

आप की तरह कुछ कर सकते हैं: पाठक का उपयोग

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

आप अपने स्ट्रिंग का निर्माण करने में सक्षम हो जाएगा। लेकिन यदि आप SAX का उपयोग कर रहे हैं तो आप सीधे पार्सर को स्ट्रीम दे सकते हैं। इस तरह आपको स्ट्रिंग बनाना नहीं होगा और आपकी मेमोरी पदचिह्न भी कम होगी।

0

कोड की संक्षिप्तता के संदर्भ में यह Fluent API इस तरह का उपयोग किया जा सकता है:

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

प्रलेखन ने चेतावनी दी है, हालांकि इस दृष्टिकोण स्मृति खपत के मामले में आदर्श नहीं है कि।

संबंधित मुद्दे

 संबंधित मुद्दे