如何在Java中阻止403 HTTP错误代码?

时间:2012-12-03 08:53:40

标签: java http http-headers

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

5 个答案:

答案 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