我使用简单代码获取http://www.ip-adress.com的html,但它显示错误http代码403。 我在程序中像google.com这样的其他网站试试,它可以工作。我也可以在浏览中打开www.ip-adress.com,为什么我不能在java程序中使用它。
public class urlconnection
{
public static void main(String[] args)
{
StringBuffer document = new StringBuffer();
try
{
URL url = new URL("http://www.ip-adress.com");
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
document.append(line + " ");
reader.close();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println(document.toString());
}
}
java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.ip-adress.com/
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at urlconnection.main(urlconnection.java:14)
答案 0 :(得分:2)
这是您需要的行
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
参考this
答案 1 :(得分:1)
Web服务器可以检测到您实际上并未尝试通过HTTP访问它,因此它会拒绝您的请求。有一些方法可以伪造,以欺骗服务器认为你是一个浏览器。
答案 2 :(得分:1)
我认为该网站会检查用户代理标头并阻止它看起来像“机器人”。你需要模仿普通的浏览器。检查此解决方案Setting user agent of a java URLConnection或尝试使用commons http client并设置用户代理。
答案 3 :(得分:1)
我不相信这基本上是一个Java问题。您正在做正确的事情来建立HTTP连接,而服务器正在做正确的事情"从它的角度来看,通过403响应回复你的请求。
让我们明白这一点 - 你得到的回应是由于目标网络服务器正在使用的逻辑。
因此,如果您要问"我如何修改我的请求以便http://www.ip-address.com返回200响应",那么人们可能会想出让该服务器满意的解决方法。但这是一个特定于主机的过程;您的Java代码可以说是正确的,但它应该有更好的错误处理,因为可以总是得到非2xx响应。
答案 4 :(得分:0)
尝试将连接User-Agent
更改为类似浏览器的内容,我大多数情况下使用Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1