私はあなたの2つのURLの違いに気づいた:
ブラウザはリダイレクトに従うことができますが、あなたのプログラムは何らかの理由で(以下を参照)できません。
HTTPクライアントライブラリ(例:Apache HTTP clientまたはJsoup)を使用し、リダイレクトに従うように設定することをお勧めします(デフォルトではそうしない場合)。
例えば、Jsoupで、あなたはこのようなコードが必要になりますが:@のEJPのコメント
String url = "https://dl.jatt.link/hd.jatt.link/a0339e7c772ed44a770a3fe29e3921a8/uttzv/Hummer-(Mr-Jatt.com).mp3";
String filename = "C:/Songs/newsong.mp3";
Response r = Jsoup.connect(url)
//.followRedirects(true) // follow redirects (it's the default)
.ignoreContentType(true) // accept not just HTML
.maxBodySize(10*1000*1000) // accept 10M bytes (default is 1M), or set to 0 for unlimited
.execute(); // send GET request
FileOutputStream out = new FileOutputStream(new File(filename));
out.write(r.bodyAsBytes());
out.close();
更新:
を設定します。 デフォルトではTrueです。
- のでOPのアプローチは、通常はあまりにもリダイレクトで動作しますが、HTTPSからHTTPへのリダイレクトが
HttpsURLConnection
で(適切に)処理されないようです。 - @VGRは以下のコメントに記載されています。
Location
ヘッダーをHttpsURLConnection
と読んで手動でリダイレクトを処理し、それを新しいHttpURLConnection
で使用することができます。
- 私はJsoupが既にHTTPリダイレクションへのHTTPSを正しく処理する方法を実装していると同時に、役に立つ豊富な機能を提供しているので、私はJsoupを提案しました(これはJsoupが同じことをしても驚くことではありません)。
'https' URLから' http' URLへのリダイレクトは安全でないと考えられているので、多くのライブラリはリダイレクトに従うように要求されてもそれに従わないことに注意してください。 – VGR
あなたは確かに正しいとありがとうございます。 :)私はちょうど上記のURLでJsoupを試してきましたが、完璧に動作します。 :) – juzraai
ありがとう...私はリダイレクトに従っていなかったからだと思った。リダイレクトに従い、Jsoupを使用してレスポンスをバイトとして消費する簡単な方法を教えていただきありがとうございます。偶然、私はすでにJsoupを私のアプリケーションの一部として使っています! – superstar