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

Posted

技术标签:

【中文标题】java.io.IOException:服务器返回 HTTP 响应代码:URL 的 403 [重复]【英文标题】:java.io.IOException: Server returned HTTP response code: 403 for URL [duplicate] 【发布时间】:2015-07-17 12:54:38 【问题描述】:

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

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

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 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627) 在 Links.main(Links.java:41)

【问题讨论】:

您能否添加更多堆栈跟踪或您得到的异常。 线程“主”java.io.IOException 中的异常:服务器返回 HTTP 响应代码:URL 的 403: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】:

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

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

如何设置标头取决于您如何建立连接,但如果您使用的是简单的 URLConnection,那么这将起作用:

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

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

您可以使用wget 来证明这一点,无论是否使用-U User-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
...

【讨论】:

以上是关于java.io.IOException:服务器返回 HTTP 响应代码:URL 的 403 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

java.io.IOException:系统找不到指定的路径

java.io.IOException: toDerInputStream 拒绝标签类型 77

解决Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory