मैं HTTP क्लाइंट पर एक आरईएसटी एक्सेस करने का प्रयास करने के लिए HTTP क्लाइंट संस्करण 4.1.2 का उपयोग कर रहा हूं जिसके लिए मूल प्रमाणीकरण की आवश्यकता है।बेसिक एथ का उपयोग करते समय HTTP क्लाइंट दो अनुरोध भेजता है?
DefaultHttpClient httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());
// Enable HTTP Basic Auth
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(this.username, this.password));
HttpHost proxy = new HttpHost(this.proxyURI.getHost(), this.proxyURI.getPort());
httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, proxy);
जब मैं एक POST
अनुरोध का निर्माण, इस तरह::
HttpPost request = new HttpPost("http://my/url");
request.addHeader(new BasicHeader("Content-type", "application/atom+xml; type=entry")); // required by vendor
request.setEntity(new StringEntity("My content"));
HttpResponse response = client.execute(request);
मैं Charles Proxy में देख दो अनुरोध भेजा जा रहा है देखते हैं कि यहाँ ग्राहक कोड है। Authorization: Basic ...
शीर्षलेख के बिना एक और के साथ। पहले एक, एक 401 के साथ विफल हो के रूप में आप उम्मीद करेंगे, लेकिन दूसरे के साथ ठीक माध्यम से चला जाता है एक 201
किसी को भी पता है कि ऐसा क्यों होता? धन्यवाद!
संपादित करें:
मैं स्पष्ट कर दिया कि मैं पहले से ही this question पर ध्यान दिया है बनाना चाहिए, लेकिन जैसा कि आप देख सकते हैं मैं AuthScope
उसी तरह सेट और यह मेरी समस्या का समाधान नहीं किया। इसके अलावा, मैं एक नई HttpClient
हर बार जब मैं एक अनुरोध किया (हालांकि मैं एक ही ConnectionManager
का उपयोग करें) बनाने रहा हूँ, लेकिन यहां तक कि अगर मैं एक से अधिक अनुरोध के लिए एक ही HttpClient
उपयोग करते हैं, समस्या अभी भी बनी हुई है।
संपादित करें 2:
तो यह लग रहा है क्या @LastCoder सुझाव दे रहा था तरीके से करना है की तरह। this answer को दूसरे प्रश्न पर देखें। समस्या HTTP spec के आसपास ज्ञान की कमी से उत्पन्न होती है। जो मैं करना चाहता हूं उसे "प्रीपेप्टिव प्रमाणीकरण" और HttpClient
docs mention it here कहा जाता है। शुक्र है, उपरोक्त से जुड़ा उत्तर यह करने के लिए एक बहुत छोटा और साफ तरीका है।
मैं एक ही बात है जब साबुन-ui का उपयोग कर eventhough क्रेडेंशियल्स निर्दिष्ट किया गया हो रहा देखा। – Harindaka
मुझे आश्चर्य है कि यह वास्तव में सामान्य व्यवहार है या नहीं। क्लाइंट एक http अनुरोध करता है कि वह कोई लेख नहीं मानता है और फिर उसे बताया जाता है (401 के माध्यम से) कि मूल लेख की आवश्यकता है। सिद्धांत रूप में बुनियादी लेख को पूर्ववत किया जा सकता है लेकिन अन्य लेख योजनाओं (पूर्व पाचन) को अतिरिक्त बातचीत की आवश्यकता है – seand
@seand आप जानते हैं कि मैंने वास्तव में इसे माना है, लेकिन मुझे नहीं पता कि यह HTTP प्रोटोकॉल या ऐसा कुछ है या नहीं। – daveslab