HttpClient通过HttpPost 进行数据传递
简介如何使用HttpClient进行HttpPost请求
下列是使用的jar请对应版本进行操作。
由于本人的项目这里使用的包比较多,这里是这四个包都需要修改,如果需要测试,只替换自己需要的包就可以
第一步-服务端推送
这里使用的使用的一部分代码,其中有些方法为保存或者判断中使用的,可以自行书写
//图片转发流
public static String postBuilder(String url, Map<String, Object> params) throws Throwable {
CloseableHttpClient httpClient = HttpClients.createDefault();
// result
String result = "";
File newfile = null;
try {
HttpPost httpPost = new HttpPost(url);
// 设置请求和传输超时时间
// RequestConfig requestConfig = RequestConfig.custom()
// .setConnectTimeout(10_000)
// .setConnectionRequestTimeout(10_000)
// .setSocketTimeout(10_000).build();
// httpPost.setConfig(requestConfig);
// headers.forEach((key, value) -> httpPost.setHeader(key, value));
//构造请求体
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
// 以浏览器兼容模式运行,防止文件名乱码。
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
// 设置二进制的方式上传文件addBinaryBody() 如果是表单 用addPart() 主要用哪一个看需求
Record record = ResourceManager.getResource("xcxm", (String) params.get("fileId"));
File file = ResourceManager.getFile(false, record);
FileInputStream fis = new FileInputStream(file);
byte[] bit = new byte[fis.available()];
fis.read(bit);
File file2 = new File(file.getPath() + "2021");
FileOutputStream fos = new FileOutputStream(file2);
fos.write(bit);
fis.close();
fos.close();
//File file = new File("D:\\a1.png");
//cn.crtech.cooperop.bus.util.GlobalVar.getSystemProperty("rm.path")
if (!new File(GlobalVar.getSystemProperty("rm.tempfilepath")).exists()) {
new File(GlobalVar.getSystemProperty("rm.tempfilepath")).mkdir();
}
//移动到临时表
newfile = new File(GlobalVar.getSystemProperty("rm.tempfilepath") + "/" + record.get("file_name"));
//服务器本地保存
file.renameTo(newfile);
file2.renameTo(file);
entityBuilder.addBinaryBody("file", newfile);
entityBuilder.addTextBody("fileId", params.get("fileId").toString());
entityBuilder.addTextBody("userid", params.get("userid").toString());
entityBuilder.addTextBody("gzid", params.get("gzid").toString());
HttpEntity reqEntity = entityBuilder.setCharset(CharsetUtils.get("UTF-8")).build();
httpPost.setEntity(reqEntity);
// System.out.println("发起请求的页面地址 " + httpPost.getRequestLine());
// 发起请求 并返回请求的响应
CloseableHttpResponse response = httpClient.execute(httpPost);
result = loadRtn(response);
// try {
// // 获取响应对象
// HttpEntity resEntity = response.getEntity();
// if (resEntity != null) {
// result = EntityUtils.toString(resEntity, Charset.forName("UTF-8"));
// }
// // 销毁
// EntityUtils.consume(resEntity);
// }catch(Exception e){
// e.printStackTrace();
// } finally {
// if (response != null) {
// response.close();
// }
// if(newfile.exists()){
// newfile.delete();
// }
// }
} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpClient != null) {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (newfile.exists()) {
newfile.delete();
}
}
return result;
}
第二步-客户端接收
//@WebServlet("/wxSgin")
public class wxuploadSgin extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Map<String,Object> map = new HashMap<>();
InputStream inputStream=null;
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
//普通文本信息处理
String paramName = item.getFieldName();
String paramValue = item.getString();
System.out.println(paramName + ":" + paramValue);
map.put(paramName,paramValue);
} else {
//上传文件信息处理
String fileName = item.getName();
inputStream=item.getInputStream();
map.put("item",item);
// byte[] data = item.get();
// String filePath = "D:\\a.png";
// FileOutputStream fos = new FileOutputStream(filePath);
// fos.write(data);
// fos.close();
}
}
InterfaceService interfaceService=new InterfaceService();
String file_cid="";
try {
file_cid=interfaceService.wxuploadSsgin(map);
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType("text/html; charset=UTF-8");
Map<String,Object> rtn=new HashMap<>();
rtn.put("file_cid",file_cid);
response.getWriter().write(CommonFun.object2Json(file_cid));
response.getWriter().flush();
response.getWriter().close();
} catch (FileUploadException e) {
e.printStackTrace();
}
}
public static String getBodyString(ServletRequest request) throws IOException {
try(BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8"))) {
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
}
}
1.这里使用的是web.xml的形式来配置的,当然注解也是可以的。
<!--图片上传只是例子-->
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>cn.xxx.cooperop.xxx.servlet.upload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>```
附链接:https://www.cnblogs.com/flying607/p/5748385.html
结尾
1.此文章本人调用HttpClient-HttpPost的笔记,如有错误请各位大佬指导改正
2.对于本人引用的链接和demo代码,如有遇到原始的希望告知,方便及时贴上其原帖
3.如果对上述的问题存在解答方法,欢迎在帖子下评论。