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

时间:2010-10-06 03:45:43

标签: java http http-status-code-403

我想从url下载mp3文件:“http://upload13.music.qzone.soso.com/30671794.mp3”,我总是得到java.io.IOException:服务器返回HTTP响应代码:403 for URL。但是使用浏览器打开网址时没关系。以下是我的代码的一部分:

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()));​

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

5 个答案:

答案 0 :(得分:44)

您也可以使用

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

答案 1 :(得分:24)

如果您使用URLConnection,而不是在java中使用HttpURLConnection,您应该可以从java访问所请求的网页。请尝试以下代码:

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

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


编辑(@Mordechai):无需进行投射,只需添加用户代理。

答案 2 :(得分:4)

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

问题出在服务器端。

答案 3 :(得分:2)

当我使用浏览器访问URL时,我也得到403.也许您已经使用浏览器登录了该站点?

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

您可以通过添加以下内容来设置Cookie:

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

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

答案 4 :(得分:0)

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

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