4

我使用简单的代码来获取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)
4

5 回答 5

3

这是您需要的行

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

参考这个

于 2012-12-03T09:07:56.440 回答
1

Web 服务器可以检测到您实际上并未尝试通过 HTTP 访问它,因此它会拒绝您的请求。有一些方法可以伪造它来欺骗服务器认为你是浏览器。

于 2012-12-03T08:57:53.667 回答
1

我想该站点会检查用户代理标头并阻止它似乎是“机器人”。您需要模仿普通浏览器。检查此解决方案设置 java URLConnection 的用户代理 或尝试使用公共 http 客户端并设置用户代理。

于 2012-12-03T08:59:40.747 回答
1

我不相信这从根本上是一个 Java 问题。您正在做正确的事情来建立 HTTP 连接,并且服务器通过使用 403 响应响应您的请求,从它的角度来看正在做“正确的事情”。

让我们明确一点 - 您得到的响应是由于目标网络服务器使用的任何逻辑。

因此,如果您要问“我如何修改我的请求,以便http://www.ip-address.com返回 200 响应”,那么人们可能会想出让服务器满意的解决方法。但这是一个特定于主机的过程;您的 Java 代码可以说是正确的,尽管它应该具有更好的错误处理能力,因为您总是可以获得非 2xx 响应。

于 2012-12-03T09:04:10.953 回答
0

尝试将连接更改User-Agent为浏览器之类的东西,大多数时候我使用Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1

于 2012-12-03T08:59:49.357 回答