java ClientProtocolException में httpClient.execute(httpget, responseHandler)




android http-get (4)

आप अपना स्वयं का प्रतिसाद इंटरसेप्टर जोड़ने का प्रयास कर सकते हैं, जहां आप हेडर जोड़ सकते हैं या हटा सकते हैं या कुछ डीबग जानकारी प्रिंट कर सकते हैं

hc.addResponseInterceptor(new HttpResponseInterceptor() {
    @Override
    public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
        response.getEntity().writeTo(System.out);
    }
});

मैं वेब सर्वर से xml का अनुरोध करने के लिए निम्नलिखित कोड का उपयोग कर रहा हूं:

HttpClient httpclient = new DefaultHttpClient()
try 
{
    HttpGet httpget = new HttpGet("http://63.255.173.242/get_public_tbl.cgi?A=1");              
    ResponseHandler responseHandler = new BasicResponseHandler();
    String responseBody = httpclient.execute(httpget, responseHandler);
    System.out.println(responseBody);
}
catch (ClientProtocolException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
} 
finally 
{
    httpclient.getConnectionManager().shutdown();
}

जब मैं httpclient.execute (httpget, responseHandler) को कॉल करता हूं, तो मुझे एक क्लाइंट प्रोटोकॉल ऐक्सप्शन मिलता है। यूआरएल एक वेब ब्राउज़र में ठीक काम करता है, यह एक्सएम रिटर्न करता है और ब्राउज़र इसे प्रदर्शित करता है

कोई भी विचार क्यों मुझे क्लाइंट प्रोटोकॉल अपॉक्सेशन मिलेगा और ब्राउज़र अभी भी ठीक से संभालता है?

1 संपादित करें:

प्रोटोकॉल अपवाद को देखते हुए विस्तार संदेश है: "सर्वर एक मान्य HTTP प्रतिक्रिया के साथ प्रतिक्रिया करने में विफल रहा।" मैं उस वेब सर्वर को बदल नहीं सकता जिसे मैं मार रहा हूं। क्या इस पर ध्यान न दें और प्रतिक्रिया का उपयोग करें?

2 संपादित करें:

मैंने पाया है कि सर्वर एक पूर्ण शीर्षलेख वापस नहीं भेज रहा है क्या एक टूटी हुई शीर्षलेख लौटाए जाने पर भी प्रतिक्रिया की सामग्री का उपयोग करने का कोई तरीका है?

3 संपादित करें: मैंने आईपी एड्रेस को वास्तविक आईपी एड्रेस को संपादित किया है, जो मैं मार रहा हूं। कोई भी सहायताकाफी प्रशंसनीय होगी।


जैसा कि आपका कोड सही लगता है, आपको यह पता लगाना होगा: क्या यह क्लाइंट की गलती है (अमान्य अनुरोध), या सर्वर की गलती (अमान्य प्रतिक्रिया) ऐसा करने के लिए, एक HTTP ट्रेस utitlity का उपयोग करें और एक ब्राउज़र के अनुरोधों की तुलना आपके क्लाइंट के लिए करें। आप सर्वर से कच्ची प्रतिक्रिया देख पाएंगे, अगर कोई भी हो तो यदि आप इसे समझ नहीं सकते हैं, तो अपने प्रश्न का कच्चा अनुरोध और प्रतिक्रिया जोड़ें और कोई भी आपकी मदद कर सके।


मैंने आपके कोड को अपने आईपी पते के साथ परीक्षण किया है I कोड में कोई त्रुटि नहीं है मैंने सिर्फ ResponseHandler को BasicResponseHandler को बदल दिया है।

इसे देखो

 HttpClient httpclient = new DefaultHttpClient();
    try 
    {
        HttpGet httpget = new HttpGet("http://www.MyServer.com/get_public_tbl.cgi?A=1");               
        BasicResponseHandler responseHandler = new BasicResponseHandler();//Here is the change
        String responseBody = httpclient.execute(httpget, responseHandler);
        System.out.println(responseBody);
    }
    catch (ClientProtocolException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    } 
    finally 
    {
        httpclient.getConnectionManager().shutdown();
    }

क्लाइंट में सेट किए गए आपके हेडर की जांच करें, दोनों कुंजी और हेडर के मान दोबारा सत्यापित करें। मेरे मामले में मैं "कुकी" के बजाय "सीएसआरएफ" का उपयोग कर रहा था