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

2022-09-01 15:17:19

我的代码是这样的:

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)");

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

一些可能的坏“用户代理”,您可能希望从服务器阻止,具体取决于您是否不希望人们窃取您的内容和带宽。但是,用户代理可以被欺骗,正如您在上面的示例中看到的那样。


答案 2

403 表示禁止。从这里:-

10.4.4 403 禁止访问

服务器理解该请求,但拒绝满足它。授权将无济于事,不应重复请求。如果请求方法不是HEAD,并且服务器希望公开请求未被满足的原因,则应在实体中描述拒绝的原因。如果服务器不希望向客户端提供此信息,则可以改用状态代码 404(未找到)。

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

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

10.4.8 需要 407 代理身份验证

此代码类似于 401(未经授权),但指示客户端必须首先使用代理对自身进行身份验证。代理必须返回一个“代理身份验证”标头字段(第 14.33 节),其中包含适用于所请求资源的代理的质询。客户端可以使用合适的代理授权标头字段重复请求(第 14.34 节)。HTTP 访问身份验证在“HTTP 身份验证:基本和摘要式访问身份验证”中进行了说明

另请参阅此相关问题。


推荐