Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使用DefaultHttpClient使用用户名和密码调用URL时出现HTTP错误401.2_Java_Android_Http - Fatal编程技术网

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,所以引用可能是您最好的选择。