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

Posted

技术标签:

【中文标题】java.io.IOException:服务器返回 HTTP 响应代码:URL 为 403【英文标题】:java.io.IOException: Server returned HTTP response code: 403 for URL 【发布时间】:2011-04-21 15:03:25 【问题描述】:

我想从 url 下载 mp3 文件:“http://upload13.music.qzone.soso.com/30671794.mp3”,我总是得到 java.io.IOException: Server returned HTTP response code: 403 for网址。但是使用浏览器打开网址就可以了。以下是我的部分代码:

BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try 
    URL url = new URL(link);

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

    String contentType = urlConn.getContentType();

    System.out.println("contentType:" + contentType);

    InputStream is = urlConn.getInputStream();
    bis = new BufferedInputStream(is, 4 * 1024);
    bos = new BufferedOutputStream(new FileOutputStream(
    fileName.toString()));​

有人可以帮助我吗?提前致谢!

【问题讨论】:

Why do I get a 403 error when I try open a URL 的可能重复项 @Krease 虽然这并不是真正的重复,但您的链接是我正在寻找的解决方案。谢谢! 【参考方案1】:

你也可以使用

System.setProperty("http.agent", "Chrome");

它对我有用。

//更新

说明

因为 HttpURLConnection 会读取属性“http.agent”(如果已设置)。 你可以在这里阅读:https://www.innovation.ch/java/HTTPClient/advanced_info.html

或者你可以在HttpURLConnection类的源码中查找:

String agent = java.security.AccessController.doPrivileged(new sun.security.action.GetPropertyAction("http.agent"));

【讨论】:

谢谢它帮助我! 谢谢,这应该是公认的答案!为我工作! 生产服务器不工作 非常感谢!你保存了我的实现! 非常感谢。这解决了问题!【参考方案2】:

而不是在java中使用URLConnection,如果你使用HttpURLConnection,你应该能够从java访问请求的网页。试试下面的代码:

 HttpURLConnection httpcon = (HttpURLConnection) url.openConnection(); 
 httpcon.addRequestProperty("User-Agent", "Mozilla/4.76"); 

不接受使用urlConnection 的普通java 访问互联网。要访问浏览器,它需要执行搜索而不出现异常HTTP response code : 403 for URL


编辑(@Mordechai):无需进行强制转换,只需添加用户代理即可。

【讨论】:

这里转换为HttpURLConnection不会改变任何东西,url.openConnection()返回的对象是一样的,不管你是否转换。 什么? “不接受使用 urlConnection 的普通 java 访问互联网” 这是不正确且具有误导性的。投射不会改变底层对象是什么,并且 OP 已经在设置 ​​User-Agent 请求属性......这怎么会有这么多的赞成票? 之所以有这么多的赞成票是因为如果 url 连接没有添加请求属性,它实际上解决了问题,并且像我一样,人们在谷歌搜索并尝试它并且它有效,但是如果您只设置URLConnection.addRequestProperty("User-Agent", "Mozilla/4.76"),它也会起作用 cftc.gov 昨天第一次发出此错误 (403)。要解决此问题,只需添加 conn.addRequestProperty("User-Agent", "Chrome");其中 conn 表示简单的 URLConnection。感谢您的帮助!【参考方案3】:

当我使用浏览器访问该 URL 时,我也会收到 403。也许您已使用浏览器登录到该站点?

如果是这种情况,您需要从浏览器复制 cookie 并将其发送出去,如果网站进行任何额外检查,您甚至可以做更多的工作来复制浏览器的签名。

您可以通过添加设置cookie:

urlConn.setRequestProperty("Cookie", "foo=bar"); 

其中 foo=bar 是您在浏览器中找到该网站的 cookie 时会找到的键值对。

【讨论】:

【参考方案4】:

问题由状态码给出。 403 实际上意味着“禁止”并暗示请求被拒绝是由于服务器不想(或没有办法)向客户端指示的原因。

问题出在服务器端。

【讨论】:

【参考方案5】:

我还会检查资源所在的服务器是否有 ACL 或类似的位置,我们只是通过这种方式解决了“java.io.IOException: 403”问题。

403 错误非常普遍,您无法确定其来源,因为它可以是任何东西。

【讨论】:

以上是关于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