Java 尝试使用DefaultHttpClient使用用户名和密码调用URL时出现HTTP错误401.2
这是我的代码:Java 尝试使用DefaultHttpClient使用用户名和密码调用URL时出现HTTP错误401.2,java,android,http,Java,Android,Http,这是我的代码: private DefaultHttpClient httpClient; public HttpAPIRequest(String authScope, int port, Credentials credentials){ httpClient = new DefaultHttpClient(); httpClient.getCredentialsProvider().setCredentials( new AuthScope(aut
private DefaultHttpClient httpClient;
public HttpAPIRequest(String authScope, int port, Credentials credentials){
httpClient = new DefaultHttpClient();
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(authScope, port),
new UsernamePasswordCredentials(credentials.getUsername(), credentials.getPassword()));
}
public String request(String apiUrl) throws ClientProtocolException, IllegalStateException, IOException{
HttpGet httpGet = new HttpGet(apiUrl);
HttpResponse response = httpClient.execute(httpGet);
return getResponseBody(response);
}
这是我在我的回复栏中遇到的错误
HTTP错误401.2-
未经授权:由于服务器原因,访问被拒绝
配置.Internet信息服务(IIS)
您没有权限使用查看此目录或页面
您提供的凭据,因为您的Web浏览器正在发送
Web服务器未配置为的WWW身份验证标头字段
接受
如何解决此问题?有几种方法可以对URL进行身份验证,您收到的错误表明您正在发送WWW authenticate标头,但web服务器未配置为接受该标头。您试图对哪个URL进行身份验证?当您尝试使用常规web浏览器访问它时,它是什么样子的
更有可能的是,它被配置为“基于表单的身份验证”,这意味着有一个普通网页上有一个web表单,您可能可以通过发布表单参数等来编写脚本。有几种方法可以对URL进行身份验证,您收到的错误指示您正在发送WWW Authenticate标头,但web服务器未配置为接受该标头。您试图对哪个URL进行身份验证?当您尝试使用常规web浏览器访问它时,它是什么样子的
更可能的是,它被配置为“基于表单的身份验证”,这意味着有一个普通的网页,上面有一个web表单,您可以通过发布表单参数等来编写脚本。这是我使用的URL:。正常情况下,您会得到一个表单,就像您所说的。如果您使用Java程序中使用的相同凭据使用web浏览器登录,它是否有效?您是否使用Internet Explorer进行测试?如果是这样的话,您是否也可以尝试Firefox,和/或一台“来宾”计算机,它不会与服务器集成任何登录功能?我怀疑它需要NTLM来进行身份验证,至少需要一些额外的库才能从Java中运行。我用IE和Chrome对它进行了测试。两者都起作用了。刚刚添加了一些额外的日志记录,并发现以下行:12-03 16:41:37.675:W/etAuthenticationHandler(3219):不支持身份验证方案ntlm。所以我猜你对NTLM的要求是正确的。你知道我可以用什么好的libs吗?这就是为什么我要求用Firefox进行测试,我相信默认情况下仍然禁用了NTLM。由于您使用的是HttpClient,引用可能是您最好的选择。这是我使用的URL:。正常情况下,您会得到一个表单,就像您所说的。如果您使用Java程序中使用的相同凭据使用web浏览器登录,它是否有效?您是否使用Internet Explorer进行测试?如果是这样的话,您是否也可以尝试Firefox,和/或一台“来宾”计算机,它不会与服务器集成任何登录功能?我怀疑它需要NTLM来进行身份验证,至少需要一些额外的库才能从Java中运行。我用IE和Chrome对它进行了测试。两者都起作用了。刚刚添加了一些额外的日志记录,并发现以下行:12-03 16:41:37.675:W/etAuthenticationHandler(3219):不支持身份验证方案ntlm。所以我猜你对NTLM的要求是正确的。你知道我可以用什么好的libs吗?这就是为什么我要求用Firefox进行测试,我相信默认情况下仍然禁用了NTLM。因为您使用的是HttpClient,所以引用可能是您最好的选择。