java httpclent 模拟 HttpServletRequest 消息中转站 中转文件 和 文本 request 获取所有参数 解析 http 请求参数

543 阅读1分钟

介绍思路

1.使用httpclent

2.使用MultipartEntityBuilder 类来传入模拟数据

3.查看MultipartEntityBuilder类的api找到对应的方法进行使用提交

4.将文本文件传入对象中

5.将对象转成httpentity

6.httpclient 调用httpentity 

7.得到返回内容 ok

 

话不多说直接上代码

// 消息中转站
	@SuppressWarnings("rawtypes")
	private String sendMail(String url, HttpServletRequest req) throws Exception {
		CloseableHttpClient httpclient = HttpClients.createDefault();
		try {
			HttpPost httppost = new HttpPost(url);
			MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();

			// 添加文本信息
			Map map = req.getParameterMap();
			Set keSet = map.entrySet();
			for (Iterator itr = keSet.iterator(); itr.hasNext();) {
				Map.Entry me = (Map.Entry) itr.next();
				Object ok = me.getKey();
				Object ov = me.getValue();
				String[] value = new String[1];

				if (ov instanceof String[]) {
					value = (String[]) ov;
				} else {
					value[0] = ov.toString();
				}
				for (int k = 0; k < value.length; k++) {
					if (ok.equals("url"))
						continue;
					multipartEntity.addTextBody((String) ok, value[k]);
				}
			}
			if(ServletFileUpload.isMultipartContent(req)) {
				// 添加文件
				MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
				Iterator<String> itr = multipartRequest.getFileNames();
				while (itr.hasNext()) {
					String name = itr.next();
					MultipartFile file = multipartRequest.getFile(name);
					String fileName = file.getOriginalFilename();
					multipartEntity.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
					multipartEntity.addTextBody("filename", fileName);// 类似浏览器表单提交,对应input的name和value

				}
			}
			
			HttpEntity reqEntity = multipartEntity.build();
			httppost.setEntity(reqEntity);
			HttpResponse httpResponse = httpclient.execute(httppost);
			HttpEntity entity = httpResponse.getEntity();
			String rawHTMLContent = EntityUtils.toString(entity);
			EntityUtils.consume(entity);
			return rawHTMLContent;
		} finally {
			httpclient.close();
		}
	}

 

 

ok

 

 

 

持续更新