0

Google から返されたページのリストから HTML テキストを取得しようとしています。それらのほとんどは正常に動作しますが、https://www.google.com/patents/US6034687などの URL では常に 401 エラーが発生します。以下を参照してください。

Server returned HTTP response code: 401 for URL: https://www.google.com/patents/US6034687

私は Java を使用しており、このエラー コードを調べました。認証に関連しているようですが、この種の URL は、ログインを要求することなく、任意のブラウザーからアクセスできます。だから私は混乱しています.なぜこの種のURLだけが私にはうまくいかないのですか. これがhtmlを取得するための私のコードです

URL u=new URL(url);
    StringBuilder html =new StringBuilder();
     HttpURLConnection conn = (HttpURLConnection) u.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "text/html");
        BufferedReader br;
        try {
            br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

        String out="";
        while ((out= br.readLine()) != null) {
        //   System.out.println(out);
             html.append(out+"\n");
        }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

何か案が?

ありがとう

4

2 に答える 2

2

リクエストで User-Agent ヘッダーを送信してみてください。その401ステータスは誤解を招くものです。一部のサーバーは、ブラウザー以外のクライアントからの要求を許可しません。

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 5.2; rv:21.0) Gecko/20100101 Firefox/21.0");

ところで、 httpsスキームに対して openConnection() を実行すると、戻り値はHttpsURLConnectionであり、これは を拡張しHttpURLConnectionます。

于 2013-06-26T04:34:30.297 に答える
0

リクエストにはユーザー認証が必要です。応答には、要求されたリソースに適用可能なチャレンジを含む WWW-Authenticate ヘッダー フィールドを含める必要があります。クライアントは、適切な Authorization ヘッダー フィールドを使用してリクエストを繰り返すことができます (MAY)。リクエストに承認資格情報がすでに含まれている場合、401 応答は、それらの資格情報に対する承認が拒否されたことを示します。401 応答に前の応答と同じチャレンジが含まれており、ユーザー エージェントが少なくとも 1 回認証を試みている場合、応答で指定されたエンティティをユーザーに提示する必要があります。そのエンティティには関連する診断情報が含まれている可能性があるためです。HTTP アクセス認証については、「HTTP 認証: 基本およびダイジェスト アクセス認証」で説明されています。

于 2013-06-26T04:27:34.860 に答える