【问题标题】:java HttpClient 403 forbidden problem?java HttpClient 403禁止问题?
【发布时间】:2011-05-24 08:40:14
【问题描述】:

我使用 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 

但是使用浏览器,我可以使用相同的登录名和密码访问此页面!!!!

我该如何解决这个问题?

【问题讨论】:

  • 这是一个类型-o,还是你通过http而不是https连接到那个url?

标签: java httpclient


【解决方案1】:

您构造 AuthScope 对象,并将端口参数设置为 443(HTTPS 的默认端口)。但是,您使用指向 HTTP(默认端口 80)的 URL 创建 HttpGet 对象。

尝试使用以下方法构造 AuthScope:

new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT) 

或确保端口匹配。

【讨论】:

  • 我改变了,但同样的反应!!
【解决方案2】:

您需要仔细查看浏览器实际上是如何进行身份验证的。

您正在尝试做的是(我认为)使用 HTTP 基本身份验证发送凭据。如果站点设置为仅允许基于表单的身份验证和会话 cookie,那么它将忽略包含凭据的标头。

【讨论】:

    【解决方案3】:

    检查您使用的HttpClient 的版本是否是导致403 的原因。

    试试

    HttpClient httpClient = HttpClient.newBuilder()
                .version(HttpClient.Version.HTTP_1_1)
                .build();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 2020-06-04
      相关资源
      最近更新 更多