web-dev-qa-db-ja.com

java.io.IOException:サーバーがHTTP応答コードを返しました:URLの403

Urlからmp3ファイルをダウンロードしたい: "http://upload13.music.qzone.soso.com/30671794.mp3"、私は常にJava.io.IOExceptionを取得しました:サーバーがHTTP応答コードを返しました:URLに対して403。ただし、ブラウザを使用してURLを開いても問題ありません。以下は私のコードの一部です:

BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
    URL url = new URL(link);

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

    String contentType = urlConn.getContentType();

    System.out.println("contentType:" + contentType);

    InputStream is = urlConn.getInputStream();
    bis = new BufferedInputStream(is, 4 * 1024);
    bos = new BufferedOutputStream(new FileOutputStream(
    fileName.toString()));​

誰も私を助けることができますか?前もって感謝します!

20
Adao

使用することもできます

_System.setProperty("http.agent", "Chrome");
_

それは私のために働いた。

//更新

説明

HttpURLConnectionは、設定されている場合、プロパティ「http.agent」を読み取るためです。ここで読むことができます: https://www.innovation.ch/Java/HTTPClient/advanced_info.html

または、HttpURLConnectionクラスのソースコードで調べることができます。

String agent = Java.security.AccessController.doPrivileged(new Sun.security.action.GetPropertyAction("http.agent"));

49
Montezuma

JavaでURLConnectionを使用する代わりに、HttpURLConnectionを使用すると、要求されたWebページにJavaからアクセスできるはずです。次のコードを試してください:

 HttpURLConnection httpcon = (HttpURLConnection) url.openConnection(); 
 httpcon.addRequestProperty("User-Agent", "Mozilla/4.76"); 

通常Javaを使用してurlConnectionを使用すると、インターネットにアクセスできません。ブラウザにアクセスするには、例外なしで検索を実行する必要がありますHTTP response code : 403 for URL


編集(@Mordechai):キャストを行う必要はなく、ユーザーエージェントを追加するだけです。

24
Saratha

問題はステータスコードによって示されます。 403は実際には「禁止」を意味し、サーバーがクライアントに指示したくない(または指示する手段がない)理由で要求が拒否されたことを意味します。

問題はサーバー側にあります。

4
arthur

ブラウザでURLにアクセスすると、403も表示されます。おそらく、ブラウザでサイトにログインしていますか?

その場合は、ブラウザーからCookieを複製して送信する必要があります。サイトで追加のチェックが行われた場合は、ブラウザーの署名をさらに複製する必要があります。

以下を追加して、Cookieを設定できます。

urlConn.setRequestProperty("Cookie", "foo=bar"); 

Foo = barは、ブラウザでサイトのCookieを見つけたときに見つかるキーと値のペアです。

2
Alexander Sagen

また、リソースが配置されているサーバーにACLまたは同様の場所があるかどうかも確認します。この方法で「Java.io.IOException:403」の問題を解決しました。

403エラーは非常に一般的なものであり、ソースが何であれ、実際にソースを確認することはできません。

0
runlevel0