7

मैं अपाचे http क्लाइंट v4.5 का उपयोग कर रहा हूं और इसे एक आरईएसटी क्लाइंट के रूप में उपयोग कर रहा हूं। कुछ मामलों में मैं एक त्रुटि को पहचानता हूं "[read] I/ओ त्रुटि: समय-समय पर पढ़ें "जो httpclient ढांचे से प्राप्त होता है जब यह प्राप्त सामग्री को पढ़ता है और इसे अंतिम संदेश के रूप में दिखाता है।अपाचे एचटीपी क्लाइंट प्रिंट करता है "[पढ़ा गया] I/O त्रुटि: समय पढ़ें"

ऐसा कोई प्रभाव नहीं पड़ता है, हालांकि मुझे आश्चर्य है कि किसी के पास यह विचार है कि यह कहां है से आ रहा है और इसे कैसे हल किया जा सकता है। निम्नलिखित धागे के अनुसार (link) यह "mutlithreaded" कॉन्फ़िगरेशन के साथ एक समस्या प्रतीत होता है।

हालांकि मैं केवल http क्लाइंट की डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करता हूं और जब मैं इसका उपयोग कर रहा हूं संस्करण v4 मुझे कोई सुराग नहीं है एच ओउ मैं यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है, मैं "बहुप्रचारित" को झूठी पर सेट कर सकता हूं।

मैंने टाइमआउट सेट करने का भी प्रयास किया लेकिन इससे मदद नहीं मिली।

कोई संकेत?

प्रवेश करें:

15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "HTTP/1.1 200 OK[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Date: Tue, 29 Dec 2015 14:48:03 GMT[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Server: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "X-Powered-By: PHP/5.6.8[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Cache-Control: nocache, private[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Length: 99[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Keep-Alive: timeout=5, max=99[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Connection: Keep-Alive[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Type: application/json[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "{"success":true,"data":{"id":1946,"location":"http:\/\/localhost:9001\/shop\/api\/articles\/1946"}}" 
15:48:06.016 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[read] I/O error: Read timed out" 

मेरी HTTP क्लाइंट प्रारंभ

HttpClientBuilder httpBuilder = HttpClientBuilder.create(); 

//  set timeout did not helped 
//  RequestConfig.Builder requestBuilder = RequestConfig.custom(); 
//  requestBuilder = requestBuilder.setConnectTimeout(timeout); 
//  requestBuilder = requestBuilder.setConnectionRequestTimeout(timeout); 
//  requestBuilder = requestBuilder.setSocketTimeout(timeout); 
//  httpBuilder.setDefaultRequestConfig(requestBuilder.build()); 

HttpClient httpClient = httpBuilder.build(); 
+0

यह कुछ भी प्रिंट नहीं करता । * आपका कोड * इसे प्रिंट करता है। आप जो पूछ रहे हैं उसे अस्पष्ट करें, – EJP

+0

अपाचे http क्लाइंट का कौन सा संस्करण आप उपयोग कर रहे हैं? खैर मैं पूछ रहा हूं कि कोई जानता है कि त्रुटि संदेश क्यों "[पढ़ा गया] I/O त्रुटि: समय समाप्त हो गया" दिखाई दे रहा है। – megloff

+0

मैं इसे भी देख रहा हूं। यह ध्यान देने योग्य भी है कि कोई अपवाद नहीं डाला जा रहा है और यह एक त्रुटि के रूप में लॉग इन नहीं है, जैसे DEBUG। – BrianC

उत्तर

2

मैं httpclient 4.5.2 और मेरे मामले में उपयोग कर रहा हूँ, एक अनुरोध पर समय समाप्ति की स्थापना में मदद की:

HttpPost postRequest = new HttpPost("https://..."); 
postRequest.setHeader(..., ...); 

RequestConfig requestConfig = RequestConfig.custom() 
         .setSocketTimeout(1000) 
         .setConnectTimeout(1000) 
         .build(); 

postRequest.setConfig(requestConfig); 
0

ऐसी त्रुटि होने के कारणों में से एक यह हो सकता है कि सर्वर HTTP कनेक्शन बंद करने की नीति का पालन करता है पोन जवाब दिया। अगर ऐसा है, तो यह त्रुटि ग्राहक द्वारा कनेक्शन पुन: उपयोग को अक्षम करने से बचा जा सकता है, तो ग्राहक को सत्यापित करने के लिए यह संपर्क अभी भी जीवित है की कोई जरूरत नहीं होगा:

httpBuilder.setConnectionReuseStrategy((response, context) -> false); 
संबंधित मुद्दे