我正面临着使用Apachage HttpComponent访问the服务的奇怪行为。
我可以访问服务器日志,当我尝试连接到服务器并执行httpGet命令时,我可以在日志中看到,首先是401状态(http Unauthorized),然后是200状态(http OK)。
这两次尝试发生在"httpClient.execute(httpGet)“期间。
因此,我正在寻找如何避免这种行为。有什么想法吗?
下面是我目前正在使用的代码:
HttpGet httpGet = new HttpGet(this.url + request);
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters,3000);
HttpConnectionParams.setSoTimeout(httpParameters,5000);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
Credentials creds = new UsernamePasswordCredentials(login, password);
httpClient.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds);
HttpResponse response = httpClient.execute(httpGet);
int status = response.getStatusLine().getStatusCode();
Log.v(this, "Response code status: " + status); // code status = 200 (even if a 401 and then a 200 are visible in the server log).作为参考,我将此代码用于Android应用程序。
发布于 2015-01-07 19:42:31
这是HTTP客户端的常规行为:发送第一个请求时不进行身份验证。如果服务器返回401,请使用所需的凭据重试。在大多数情况下,web浏览器会提示您输入用户名和密码。由于您已经在代码中提供了凭据,因此可以继续并重试。
您收到的结果是带有凭据的请求之后的响应。
发布于 2015-01-07 21:58:58
为了解决我的问题,我使用了另一个与我的问题相关的问题的答案(Adam Batkin):Preemptive Basic authentication with Apache HttpClient 4 (感谢Bret Okken的链接)。
我终于有了下面这行代码:
httpGet.addHeader(BasicScheme.authenticate(creds, "UTF8", false));要获得这样的代码,请执行以下操作:
HttpGet httpGet = new HttpGet(this.url + request);
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters,3000);
HttpConnectionParams.setSoTimeout(httpParameters,5000);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
Credentials creds = new UsernamePasswordCredentials(login, password);
httpClient.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds);
httpGet.addHeader(BasicScheme.authenticate(creds, "UTF8", false));
HttpResponse response = httpClient.execute(httpGet);
int status = response.getStatusLine().getStatusCode();
Log.v(this, "Response code status: " + status);感谢Thomas Stets有趣的回答。
https://stackoverflow.com/questions/27818587
复制相似问题