Java URLConnection中url携带空格及中文处理

      最近有个从网络资源中下载图片的需求,于是屁颠屁颠开始敲代码,结果遇到了一些。。。额。。。有点‘棘手’(不得不吐槽)的问题。

HttpURLConnection 简单介绍

The Java HttpURLConnection class is http specific URLConnection. It works for HTTP protocol only.
By the help of HttpURLConnection class, you can retrieve information of any HTTP URL such as header information, status code, response code etc.

  • 只支持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 class
java中HttpURLConnection使用详解、总结。HttpClient 的使用

猜你喜欢

转载自blog.csdn.net/huhui806/article/details/126008754
今日推荐