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

我想从url下载mp3文件:“http://upload13.music.qzone.soso.com/30671794.mp3”,我总是得到java.io.IOException:服务器返回HTTP响应代码:403用于URL。 但是使用浏览器打开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()));​ 

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

你也可以使用

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

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

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

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


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

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

问题出在服务器端。

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

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

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

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

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

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

碰巧403错误是非常通用的,你不能真正确定来源,因为它可以是任何东西。