26

私のコードは次のようになります。

URL url;
URLConnection uc;
StringBuilder parsedContentFromUrl = new StringBuilder();
String urlString="http://www.example.com/content/w2e4dhy3kxya1v0d/";
System.out.println("Getting content for URl : " + urlString);
url = new URL(urlString);
uc = url.openConnection();
uc.connect();
uc.getInputStream();
BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
int ch;
while ((ch = in.read()) != -1) {
    parsedContentFromUrl.append((char) ch);
}
System.out.println(parsedContentFromUrl);

ただし、ブラウザを介して URL にアクセスしようとしても問題はありませんが、Java プログラムを介してアクセスしようとすると、期待値がスローされます。

java.io.IOException: Server returned HTTP response code: 403 for URL

解決策は何ですか?

4

3 に答える 3

52

uc.connect();と の間に以下のコードを追加しますuc.getInputStream();

uc = url.openConnection();
uc.addRequestProperty("User-Agent", 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");

ただし、特定の種類のユーザー エージェントのみを許可することをお勧めします。これにより、Web サイトが安全に保たれ、帯域幅の使用量が少なくなります。

コンテンツと帯域幅を他人にリーチさせたくない場合に応じて、サーバーからブロックしたい可能性のあるいくつかの悪い「ユーザー エージェント」。ただし、上記の例でわかるように、ユーザー エージェントはなりすましの可能性があります。

于 2011-01-25T19:05:44.070 に答える
4

403は禁止を意味します。ここから:-

10.4.4403禁止

サーバーは要求を理解しましたが、それを実行することを拒否しています。承認は役に立たず、リクエストは繰り返されるべきではありません。リクエストメソッドがHEADでなく、サーバーがリクエストが実行されなかった理由を公開したい場合は、エンティティで拒否の理由を説明する必要があります。サーバーがこの情報をクライアントに提供したくない場合は、代わりにステータスコード404(見つかりません)を使用できます。

サイトの所有者に連絡して、権限が適切に設定されていることを確認する必要があります。

編集私はあなたの問題を見ます。Fiddlerを介してURLを実行しました。以下を意味する407を取得していることに気づきました。これはあなたが正しい方向に進むのを助けるはずです。

10.4.8407プロキシ認証が必要

このコードは401(Unauthorized)に似ていますが、クライアントが最初にプロキシで自身を認証する必要があることを示しています。プロキシは、要求されたリソースのプロキシに適用可能なチャレンジを含むProxy-Authenticateヘッダーフィールド(セクション14.33)を返さなければなりません(MUST)。クライアントは、適切なProxy-Authorizationヘッダーフィールド(セクション14.34)を使用して要求を繰り返すことができます(MAY)。HTTPアクセス認証については、「HTTP認証:基本およびダイジェストアクセス認証」で説明されています。

この関連する質問も参照してください。

于 2011-01-25T18:55:07.007 に答える
2

ブラウザーがページにアクセスでき、コードがアクセスできない場合、ブラウザーの要求とあなたの要求の間に何か違いがあります。Firebug などを使用してブラウザーの要求を調べ、違いを確認できます。私が考えることができるいくつかのことは次のとおりです。

  • サイトは Cookie を設定します (おそらくログイン中)。コードでこれを処理できる場合があります。Cookie を渡すためのサポートを明示的に追加する必要があります。これは最も可能性が高いです。

  • サイトはユーザー エージェントに基づいてフィルタリングします。ユーザーエージェントを設定できます。これは可能性が低いです。

于 2011-01-25T19:06:22.793 に答える