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()));
誰も私を助けることができますか?前もって感謝します!
使用することもできます
_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"));
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):キャストを行う必要はなく、ユーザーエージェントを追加するだけです。
問題はステータスコードによって示されます。 403は実際には「禁止」を意味し、サーバーがクライアントに指示したくない(または指示する手段がない)理由で要求が拒否されたことを意味します。
問題はサーバー側にあります。
ブラウザでURLにアクセスすると、403も表示されます。おそらく、ブラウザでサイトにログインしていますか?
その場合は、ブラウザーからCookieを複製して送信する必要があります。サイトで追加のチェックが行われた場合は、ブラウザーの署名をさらに複製する必要があります。
以下を追加して、Cookieを設定できます。
urlConn.setRequestProperty("Cookie", "foo=bar");
Foo = barは、ブラウザでサイトのCookieを見つけたときに見つかるキーと値のペアです。
また、リソースが配置されているサーバーにACLまたは同様の場所があるかどうかも確認します。この方法で「Java.io.IOException:403」の問題を解決しました。
403エラーは非常に一般的なものであり、ソースが何であれ、実際にソースを確認することはできません。