java.io.IOException:服务器返回 HTTP 响应代码:URL 的 403 [重复]

Posted

技术标签:

【中文标题】java.io.IOException:服务器返回 HTTP 响应代码:URL 的 403 [重复]【英文标题】:java.io.IOException: Server returned HTTP response code: 403 for URL [duplicate] 【发布时间】:2011-06-15 10:02:12 【问题描述】:

我的代码是这样的:

URL url;
URLConnection uc;
StringBuilder parsedContentFromUrl = new StringBuilder();
String urlString="http://www.example.com/content/w2e4dhy3kxya1v0d/";
System.out.println("Getting content for URl : " + urlString);
url = new URL(urlString);
uc = url.openConnection();
uc.connect();
uc.getInputStream();
BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
int ch;
while ((ch = in.read()) != -1) 
    parsedContentFromUrl.append((char) ch);

System.out.println(parsedContentFromUrl);

但是,当我尝试通过浏览器访问 URL 时没有问题,但是当我尝试通过 java 程序访问它时,它会抛出期望:

java.io.IOException: Server returned HTTP response code: 403 for URL

解决办法是什么?

【问题讨论】:

【参考方案1】:

uc.connect();uc.getInputStream();之间添加以下代码:

uc = url.openConnection();
uc.addRequestProperty("User-Agent", 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");

但是,只允许某些类型的用户代理是个好主意。这将使您的网站安全并降低带宽使用率。

根据您是否不希望人们窃取您的内容和带宽,您可能希望从您的服务器中阻止一些可能的不良“用户代理”。但是,正如您在上面的示例中所见,用户代理可能会被欺骗。

【讨论】:

可以在here找到对这个问题的一个很好的解释 我在获取网页内容时遇到了同样的问题。这解决了我的问题,非常感谢。【参考方案2】:

403 表示禁止。来自here:-

10.4.4 403 禁止

服务器理解请求,但是 拒绝履行它。 授权将无济于事 不应重复请求。如果 请求方法不是 HEAD 并且 服务器希望公开为什么 请求没有得到满足,它 应该描述原因 拒绝实体。如果服务器 不希望提供此信息 可供客户使用,状态 可以使用代码 404(未找到) 而是。

您需要联系网站所有者以确保权限设置正确。

编辑我明白你的问题。我通过 Fiddler 运行 URL。我注意到我得到了一个 407,这意味着下面。这应该可以帮助您朝着正确的方向前进。

10.4.8 407 需要代理身份验证

此代码类似于 401 (未经授权),但表明 客户端必须首先验证自己 与代理。代理必须返回 一个 Proxy-Authenticate 头域 (第 14.33 节)包含一个挑战 适用于代理 请求的资源。客户可以 用合适的方式重复请求 Proxy-Authorization 头域 (第 14.34 节)。 HTTP 访问 身份验证在“HTTP 身份验证:基本和摘要 访问认证”

另请参阅此相关问题。

java.io.IOException: Server returned HTTP response code: 403 for URL

【讨论】:

coolbeans 先生,感谢您的及时回复网址?再次感谢!【参考方案3】:

如果浏览器可以访问该页面,而您的代码不能访问,则浏览器请求和您的请求之间存在差异。您可以查看浏览器请求,例如使用 Firebug,看看有什么区别。我能想到的一些事情是:

网站设置了一个 cookie(可能在登录期间)。你也许能够处理 这在代码中,你将不得不 显式添加对传递的支持 饼干。这很有可能。

站点过滤器基于用户代理。您可以设置用户代理。这不太可能。

【讨论】:

以上是关于java.io.IOException:服务器返回 HTTP 响应代码:URL 的 403 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java.io.IOException:服务器返回 HTTP 响应代码:URL 为 403

java.io.IOException:服务器返回 HTTP 响应代码:URL 的 403 [重复]

java.io.IOException:服务器返回 HTTP 响应代码:URL 的 403 [重复]

java.io.IOException:系统找不到指定的路径

java.io.IOException: toDerInputStream 拒绝标签类型 77

解决Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory