24

我想从 url 下载 mp3 文件:“http://upload13.music.qzone.soso.com/30671794.mp3”,我总是得到 java.io.IOException: Server returned HTTP response code: 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()));​

任何人都可以帮助我吗?提前致谢!

4

5 回答 5

60

你也可以使用

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

于 2016-03-15T16:06:17.127 回答
28

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

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

不接受使用普通 javaurlConnection访问互联网。要访问浏览器,它需要毫无例外地执行搜索HTTP response code : 403 for URL


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

于 2011-03-05T06:47:36.783 回答
2

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

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

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

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

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

于 2010-10-06T03:50:18.240 回答
2

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

问题出在服务器端。

于 2011-07-23T19:30:03.573 回答
0

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

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

于 2014-04-24T11:19:13.437 回答