4

簡単なコードを使用してhttp://www.ip-adress.comの html を取得しますが、エラー http コード 403 が表示されます。プログラムで google.com などの他の Web サイトで試してみると、動作します。ブラウズで 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

これが基本的にJavaの問題だとは思いません。あなたはHTTP接続を確立するために正しいことを行っており、サーバーは403応答で要求に応答することにより、その観点から「正しいこと」を行っています。

これについて明確にしましょう-あなたが得ている応答は、ターゲットWebサーバーによって採用されているロジックによるものです。

したがって、「 http://www.ip-address.comが200の応答を返すように要求を変更するにはどうすればよいですか」と質問した場合、人々はそのサーバーを満足させる回避策を考え出すことができるかもしれません。ただし、これはホスト固有のプロセスです。Javaコードはほぼ間違いなく正しいですが、 2xx以外の応答を常に取得できるため、エラー処理が向上するはずです。

于 2012-12-03T09:04:10.953 に答える
1

Web サーバーは、HTTP 経由で実際にアクセスしようとしていないことを検出できるため、要求を拒否します。サーバーをだましてあなたがブラウザであると思わせるために、それを偽造する方法があります。

于 2012-12-03T08:57:53.667 に答える
1

サイトはユーザー エージェント ヘッダーをチェックし、「ロボット」と思われるものをブロックしていると思います。通常のブラウザを模倣する必要があります。Java URLConnection のユーザー エージェントを設定するこのソリューションを確認する か、commons http クライアントを使用してユーザー エージェントを設定してみてください。

于 2012-12-03T08:59:40.747 に答える
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 に答える