Java中用非JSON方式请求第三方接口(form/data方式)
public static String post(String url, HashMap<String, Object> textMap) {
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
CloseableHttpResponse httpResponse = null;
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(200000000)
.build();
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
ContentType contentType = ContentType.create("multipart/form-data",Charset.forName("UTF-8"));
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
for (String str : textMap.keySet()) {
try {
System.out.println(str+"--->"+textMap.get(str).toString());
multipartEntityBuilder.addTextBody(str, textMap.get(str).toString(), contentType);
} catch (Exception e) {
e.printStackTrace();
}
}
HttpEntity httpEntity = multipartEntityBuilder.build();
httpPost.setEntity(httpEntity);
try {
httpResponse = httpClient.execute(httpPost);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
HttpEntity responseEntity = httpResponse.getEntity();
int statusCode = httpResponse.getStatusLine().getStatusCode();
String resultStr = null;
if (statusCode == 200) {
BufferedReader reader = null;
InputStreamReader isr = null;
try {
isr = new InputStreamReader(responseEntity.getContent(), "utf-8");
reader = new BufferedReader(isr);
StringBuffer buffer = new StringBuffer();
String str = "";
while ((str = reader.readLine()) != null) {
buffer.append(str);
}
resultStr = buffer.toString();
} catch (UnsupportedOperationException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
if (isr != null) {
isr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (httpResponse != null) {
try {
httpClient.close();
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultStr;
}