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


问题内容

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

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

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

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

错误详情

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


问题答案:

您尝试访问的特定Web服务器正在检查User- AgentHTTP标头,并拒绝访问任何看起来不像普通浏览器的内容,以防止出现bot(这可能就是您正在编写的内容)。

您只需要在Java中将标头设置为请求的一部分即可使用。

设置标题的方式将取决于您进行连接的方式,但是如果您使用的是简单的URLConnection,则可以使用:

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

通常,“真实” User-Agent包含许多额外信息,但是该网络服务器似乎只寻找基本的浏览器类型。

您可以通过wget使用和不使用-UUser-Agent选项来证明这一点:

$ 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
...