記事ディレクトリ
最近、ネットワーク リソースから画像をダウンロードする必要があったため、Pidianpidian はコードを入力し始め、最終的にいくつかのコードに遭遇しました。. . 額。. . 少し「トリッキーな」(文句を言わなければならない) 問題です。
HttpURLConnection の簡単な紹介
Java HttpURLConnection クラスは、http 固有の URLConnection です。HTTP プロトコルでのみ機能します。
HttpURLConnection クラスの助けを借りて、ヘッダー情報、ステータス コード、レスポンス コードなど、任意の HTTP URL の情報を取得できます。
- http プロトコルのみをサポート
- リクエスト ヘッダーやステータス コードなどの情報は、HttpURLConnection を介して取得できます。
より詳細な紹介については、この大物によって書かれた記事を読むことができます - Java での HttpURLConnection の使用の詳細な説明と概要。HttpClient の使用
真の知識は実践から生まれる
ウェブから画像をダウンロードする
public static InputStream readImage(String encodeUrl) {
try {
URL url = new URL(encodeUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// conn.connect();
// 防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
conn.setRequestProperty("Accept-Encoding", "identity");
// 获取文件转化为byte流
InputStream inputStream = conn.getInputStream();
return inputStream ;
} catch (Exception e) {
log.info("下载网络图片url:{}失败!错误信息:{}", url, e.getMessage());
e.printStackTrace();
return null;
}
}
問題に遭遇する
URL に中国語が含まれていて、ダウンロードに失敗する
URL の中国語部分をトランスコードする
URLEncoder.encode(url, "utf-8");
URL にスペースが含まれており、ダウンロードに失敗する
この問題は、バックグラウンド トランスコーディングとブラウザ トランスコーディングの間の落とし穴と見なすことができます。=_=||
URLEncoder のスペースは + でエンコードされますが、URI のスペースは %20 です
String encodeUrl = URLEncoder.encode(url, "utf-8");
encodeUrl = encodeUrl.replaceAll("\\+", "%20");
参考文献
Java での HttpURLConnection の使用に関する詳細な説明と概要 HttpURLConnection クラス
java. HttpClient の使用