工作中的采坑记录: 需要请求其他平台的接口, 对方只支持表单形式的参数, 并且参数需要直接传输图片
public static HttpResult doFormPost(String url, Map<String, File> fileMap, Map<String, String> stringMap) throws IOException {
CloseableHttpResponse response = null;
HttpPost httpPost = null;
try (CloseableHttpClient httpClient = HttpClientFactory.createNonPoolHttpClient()) {
httpPost = new HttpPost(url);
// 设置socket超时时间
RequestConfig newConfig = RequestConfig.custom().setSocketTimeout(8000).setConnectTimeout(8000).setCookieSpec("default").build();
httpPost.setConfig(wrap(newConfig, url));
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
// 遍历文件参数
for (Entry<String, File> fileEntry : fileMap.entrySet()) {
builder.addBinaryBody(fileEntry.getKey(), fileEntry.getValue());
}
// 遍历传字符串参数
for (Entry<String, String> stringEntry : stringMap.entrySet()) {
builder.addTextBody(stringEntry.getKey(), stringEntry.getValue());
}
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
response = httpClient.execute(httpPost, HttpClientContext.create());
return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity(), "UTF-8"));
} finally {
// 释放资源
if (response != null) {
response.close();
}
if (httpPost != null) {
httpPost.releaseConnection();
}
}
}