मैं सर्वर से अनुरोध करने के लिए this link का संदर्भ देता हूं। समस्या कभी-कभी होती है (हमेशा नहीं, लगभग 20% - 30%, इसका मतलब है कि मैं सफल प्रतिक्रिया प्राप्त कर सकता हूं), मुझे 401 त्रुटि मिली और सर्वर प्रतिक्रिया मूल प्राधिकरण चुनौती अपेक्षित थी, लेकिन नहीं मिला।एंड्रॉइड में बुनियादी प्रमाणीकरण के साथ "HTTP/1.1 401 अनधिकृत" त्रुटि - ईडब्ल्यूएस 2010
HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor()
{
public void process(final HttpRequest request, final HttpContext context)
throws HttpException, IOException
{
AuthState authState = (AuthState) context
.getAttribute(ClientContext.TARGET_AUTH_STATE);
CredentialsProvider credsProvider = (CredentialsProvider) context
.getAttribute(ClientContext.CREDS_PROVIDER);
HttpHost targetHost = (HttpHost) context
.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
if (authState.getAuthScheme() == null)
{
AuthScope authScope = new AuthScope(targetHost.getHostName(),
targetHost.getPort());
Credentials creds = credsProvider.getCredentials(authScope);
if (creds != null)
{
authState.setAuthScheme(new BasicScheme());
authState.setCredentials(creds);
}
}
}
};
यहाँ मेरी प्रमाणीकरण है:
HttpPost httpPost = new HttpPost(SERVER_AUTH_URL);
httpPost.setHeader("Content-type", "text/xml; charset=utf-8");
httpPost.setHeader("Keep-Alive", "300");
httpPost.setHeader("Connection", "Keep-Alive");
StringEntity se = new StringEntity(myRequest, "UTF-8");
httpPost.setEntity(se);
se.setContentType("text/xml");
se.setContentEncoding("gzip,deflate");
//add preemptiveAuth
client.addRequestInterceptor(preemptiveAuth, 0);
//Set the proxy
ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(
client.getConnectionManager().getSchemeRegistry(),
ProxySelector.getDefault());
client.setRoutePlanner(routePlanner);
List<String> authPrefs = new ArrayList<String>();
authPrefs.add(AuthPolicy.BASIC);
authPrefs.add(AuthPolicy.NTLM);
authPrefs.add(AuthPolicy.DIGEST);
client.getParams().setParameter("http.auth.scheme-priority", authPrefs);
CredentialsProvider credProvider = new BasicCredentialsProvider();
// client.getParams().setParameter("http.auth.scheme-priority",
// authPrefs);
credProvider.setCredentials(AuthScope.ANY,
new NTCredentials(getUsername(), getPassword(),
"", getDomain()));
Log.d(TAG, "repair excute");
client.setCredentialsProvider(credProvider);
HttpResponse response = client.execute(httpPost);
Log.d(TAG, "has excute");
टिप्पणी कोड से, आप देख सकते हैं मैं कई मायनों कोशिश की, लेकिन त्रुटि गायब नहीं था
यहाँ मेरी कोड है। यहां लॉगकैट कहता है:
05-02 10:28:21.724: D/dalvikvm(1169): GC_FOR_MALLOC freed 11259 objects/457352 bytes in 43ms
05-02 10:28:22.384: D/MainActivity(1169): repair excute
05-02 10:28:22.744: D/dalvikvm(1169): GC_FOR_MALLOC freed 11481 objects/447264 bytes in 67ms
05-02 10:28:22.894: D/dalvikvm(1169): GC_FOR_MALLOC freed 1078 objects/83928 bytes in 76ms
05-02 10:28:22.894: I/dalvikvm-heap(1169): Grow heap (frag case) to 3.833MB for 87396-byte allocation
05-02 10:28:23.034: D/dalvikvm(1169): GC_FOR_MALLOC freed 58 objects/3336 bytes in 143ms
05-02 10:28:23.124: W/DefaultRequestDirector(1169): Authentication error: basic authorization challenge expected, but not found
05-02 10:28:23.124: D/MainActivity(1169): has excute
05-02 10:28:23.124: E/MainActivity(1169): response error: HTTP/1.1 401 Unauthorized
तो, कृपया मुझे बताएं कि मेरी समस्या कहां है। अग्रिम में धन्यवाद।
अद्यतन: लक्ष्य सर्वर एक्सचेंज वेब सेवा 2010 है। किसी कारण से, मैं ईडब्ल्यूएस एपीआई का उपयोग नहीं करना चाहता, मैंने सर्वर से कनेक्ट करने के लिए अपना स्वयं का एक्सएमएल अनुरोध किया (यह एक्सएमएल अनुरोध ठीक से काम करता है)। पहली बार
Server Microsoft-IIS/7.5
WWW-Authenticate Negotiate
WWW-Authenticate NTLM
X-Powered-By ASP.NET
Date Fri, 25 May 2012 03:47:57 GMT
Content-Length 0
जब अनुरोध सफलता:
Cache-Control private
Transfer-Encoding chunked
Content-Type text/xml; charset=utf-8
Server Microsoft-IIS/7.5
Set-Cookie exchangecookie=1d9d9b1d21064035ad375c8aecde2168; expires=Sat, 25-May-2013 04:00:46 GMT; path=/; HttpOnly
X-AspNet-Version 2.0.50727
X-Powered-By ASP.NET
Date Fri, 25 May 2012 04:00:45 GMT
और दूसरी बार:
और यहाँ सर्वर से प्रतिक्रिया हेडर जब अनुरोध विफल है
Cache-Control private
Transfer-Encoding chunked
Content-Type text/xml; charset=utf-8
Server Microsoft-IIS/7.5
X-EwsPerformanceData RpcC=4;RpcL=0;LdapC=0;LdapL=0;
X-AspNet-Version 2.0.50727
X-Powered-By ASP.NET
Date Fri, 25 May 2012 04:00:47 GMT
कुकी मेरी समस्या है, है ना?
उपयोग Wireshark आधारित है यह आप क्या अपेक्षा भेज रहा है सुनिश्चित करने के लिए है। –
धन्यवाद, मैं अनुरोध करने के लिए सोपूआई का उपयोग करता हूं, यह हमेशा काम करता है, लेकिन मुझे नहीं पता कि यह अभी भी त्रुटि क्यों है – R4j
क्या आपके ऐप के बीच कोई प्रॉक्सी सर्वर बैठा है (यदि आप इसे एमुलेटर पर चलाते हैं, तो वास्तविक कंप्यूटर को संदर्भित करता है चलने वाला एमुलेटर) और लक्ष्य सर्वर? – yorkw