All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.chanjar.weixin.common.util.http.HttpResponseProxy Maven / Gradle / Ivy

The newest version!
package me.chanjar.weixin.common.util.http;

import jodd.http.HttpResponse;
import me.chanjar.weixin.common.error.WxErrorException;
import okhttp3.Response;
import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * 三种http框架的response代理类,方便提取公共方法
 * Created by Binary Wang on 2017-8-3.
 * 
* * @author Binary Wang */ public class HttpResponseProxy { private CloseableHttpResponse apacheHttpResponse; private HttpResponse joddHttpResponse; private Response okHttpResponse; public HttpResponseProxy(CloseableHttpResponse apacheHttpResponse) { this.apacheHttpResponse = apacheHttpResponse; } public HttpResponseProxy(HttpResponse joddHttpResponse) { this.joddHttpResponse = joddHttpResponse; } public HttpResponseProxy(Response okHttpResponse) { this.okHttpResponse = okHttpResponse; } public String getFileName() throws WxErrorException { //由于对象只能由一个构造方法实现,因此三个response对象必定且只有一个不为空 if (this.apacheHttpResponse != null) { return this.getFileName(this.apacheHttpResponse); } if (this.joddHttpResponse != null) { return this.getFileName(this.joddHttpResponse); } if (this.okHttpResponse != null) { return this.getFileName(this.okHttpResponse); } //cannot happen return null; } private String getFileName(CloseableHttpResponse response) throws WxErrorException { Header[] contentDispositionHeader = response.getHeaders("Content-disposition"); if (contentDispositionHeader == null || contentDispositionHeader.length == 0) { throw new WxErrorException("无法获取到文件名,Content-disposition为空"); } return extractFileNameFromContentString(contentDispositionHeader[0].getValue()); } private String getFileName(HttpResponse response) throws WxErrorException { String content = response.header("Content-disposition"); return extractFileNameFromContentString(content); } private String getFileName(Response response) throws WxErrorException { String content = response.header("Content-disposition"); return extractFileNameFromContentString(content); } public static String extractFileNameFromContentString(String content) throws WxErrorException { if (content == null || content.isEmpty()) { throw new WxErrorException("无法获取到文件名,content为空"); } // 查找filename*=utf-8''开头的部分 Pattern pattern = Pattern.compile("filename\\*=utf-8''(.*?)($|;|\\s|,)"); Matcher matcher = pattern.matcher(content); if (matcher.find()) { String encodedFileName = matcher.group(1); // 解码URL编码的文件名 try { return URLDecoder.decode(encodedFileName, StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } // 查找普通filename="..."部分 pattern = Pattern.compile("filename=\"(.*?)\""); matcher = pattern.matcher(content); if (matcher.find()) { return new String(matcher.group(1).getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); } throw new WxErrorException("无法获取到文件名,header信息有问题"); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy