我使用HttpClient api对网站进行身份验证:
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(AuthScope.ANY_HOST, 443),
new UsernamePasswordCredentials(args[0], args[1]));
HttpGet httpget = new HttpGet("http://..........");
HttpResponse response = httpclient.execute(httpget);
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: "
+ entity.getContentLength());
}
我有这个答案:
HTTP/1.1 403 Forbidden
Response content length: -1
但是使用浏览器我可以使用相同的登录名和密码访问此页面!!!!
我该如何解决这个问题?
答案 0 :(得分:2)
构造AuthScope对象,并将port参数设置为443(HTTPS的默认端口)。但是,您使用指向HTTP的URL(默认端口80)创建HttpGet对象。
尝试使用以下方法构建AuthScope:
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT)
或确保端口匹配。
答案 1 :(得分:0)
您需要仔细查看浏览器的实际身份验证方式。
您尝试做的是(我认为)使用HTTP基本身份验证发送凭据。如果站点设置为仅允许基于表单的身份验证和会话cookie,则它将忽略包含凭据的标头。
答案 2 :(得分:0)
检查您使用的HttpClient
的版本是否是导致403
的原因。
尝试
HttpClient httpClient = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.build();