Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中防止403HTTP错误代码?_Java_Http_Http Headers - Fatal编程技术网

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

如何在Java中防止403HTTP错误代码?,java,http,http-headers,Java,Http,Http Headers,我使用简单的代码获取的html,但它显示错误http代码403。 我在其他网站如google.com的程序中尝试过,它可以工作。我也可以在browse中打开www.ip-address.com,为什么我不能在java程序中使用它 public class urlconnection { public static void main(String[] args) { StringBuffer document = new StringBuffer(); try

我使用简单的代码获取的html,但它显示错误http代码403。 我在其他网站如google.com的程序中尝试过,它可以工作。我也可以在browse中打开www.ip-address.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)

web服务器可以检测到您实际上没有试图通过HTTP访问它,因此它会拒绝您的请求。有很多方法可以假装你是一个浏览器,让服务器误以为你是一个浏览器。

我想该网站会检查用户代理标题,并阻止看起来像是“机器人”的内容。你需要模仿普通的浏览器。检查此解决方案或尝试使用commons http client并设置用户代理。

尝试将连接
用户代理
更改为类似浏览器的东西,大多数时候我使用的是
Mozilla/6.0(Windows NT 6.2;WOW64;rv:16.0.1)Gecko/20121011 Firefox/16.0.1
我认为这根本不是Java问题。您进行HTTP连接是正确的,服务器通过403响应响应您的请求,从其角度来看是“正确的”

让我们弄清楚这一点——您得到的响应是由目标Web服务器使用的任何逻辑造成的


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

这是您需要的行

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

请参阅

是否检查了代理配置?是否搜索了403的含义?