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

时间:2015-05-07 05:42:34

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

我想从网址打开一个链接:“http://www.kohls.com/search.jsp?search=jacket&submit-search=web-regular”,有时我得到:

  

java.io.IOException:服务器返回HTTP响应代码:403为URL。但是使用浏览器打开网址时没关系。以下是我的代码的一部分:

URL url = new URL("http://www.kohls.com/search.jsp?search=jacket&submit-search=web-regular");

InputStream is = url.openConnection().getInputStream();

错误明细

  

线程“main”中的异常java.io.IOException:服务器返回HTTP响应代码:403为URL:http://www.kohls.com/search.jsp?N=0&search=jacket&WS=96       at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627)       在Links.main(Links.java:41)

1 个答案:

答案 0 :(得分:12)

您尝试访问的特定网络服务器是检查User-Agent HTTP标头并拒绝访问任何看起来不像普通浏览器的内容,以防止机器人(可能是您正在编写的内容)

您只需要在Java中将标头设置为请求的一部分,它就可以工作。

如何设置标题取决于您建立连接的方式,但如果您使用的是简单的URLConnection,那么这将有效:

URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0");

通常是"真实" User-Agent包含大量额外信息,但该网络服务器似乎只查找基本浏览器类型。

您可以使用wget使用-U用户代理选项来证明这一点:

$ wget "http://www.kohls.com/search.jsp?search=jacket&submit-search=web-regular"
--2015-05-07 16:08:46--  http://www.kohls.com/search.jsp?search=jacket&submit-search=web-regular
2015-05-07 16:08:46 ERROR 403: Forbidden.

$ wget -U "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0" "http://www.kohls.com/search.jsp?search=jacket&submit-search=web-regular"
--2015-05-07 16:08:49--  http://www.kohls.com/search.jsp?search=jacket&submit-search=web-regular
awaiting response... 200 OK
...