最近需要用到许多在后台发送http请求的功能,可能需要发送json和xml类型的数据。

就抽取出来写了一个帮助类:

首先判断发送的数据类型是json还是xml:

import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;

import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;


    /**
* 判断是否是json结构
*/
public static boolean isJson(String value) {
try {
JSONObject.parseObject(value);
} catch (JSONException e) {
return false;
}
return true;
} /**
* 判断是否是xml结构
*/
public static boolean isXML(String value) {
try {
DocumentHelper.parseText(value);
} catch (DocumentException e) {
return false;
}
return true;
}

判断之后就设置对应的属性,然后执行post方法:

import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;    private static int connectionTimeout = 1000;// 连接超时时间,毫秒
private static int soTimeout = 30000;// 读取数据超时时间,毫秒
/** HttpClient对象 */
private static CloseableHttpClient httpclient = HttpClients.
custom().disableAutomaticRetries().build();
/*** 超时设置 ****/
private static RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(soTimeout)
.setConnectTimeout(connectionTimeout)
.build();//设置请求和传输超时时间   /**
* 根据给定的URL地址和参数字符串,以post方法调用,如果成功返回true,如果失败返回false
*
* @param url String url地址,不含参数
* @param param Map<String, Object> 参数字表单
* @return boolean true-成功,false失败,如果返回成功可以getStrGetResponseBody()
* 获取返回内容字符串,如果失败,则可访问getErrorInfo()获取错误提示。
*/
public String executePostMethod(String strURL, String param) {
System.out.println("step into executePostMethod");
String strResult = "";
HttpPost post = new HttpPost(strURL);
post.setConfig(requestConfig);
StringEntity entity; try {
System.out.println("step into try"); if(isJson(param)){
System.out.println("it is json");
entity = new StringEntity(param,"utf-8"); // 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
post.setEntity(entity);
}else if(isXML(param)){
System.out.println("it is xml");
entity = new StringEntity(param,"utf-8"); // 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("text/xml");
post.setEntity(entity);
}else{
entity = new StringEntity(param,"utf-8"); // 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/x-www-form-urlencoded");
post.setEntity(entity);
} //发起请求
HttpResponse httpResponse = httpclient.execute(post);
// 请求结束,返回结果
strResult = EntityUtils.toString(httpResponse.getEntity());
System.out.println(strResult);
} catch (Exception e) {
e.printStackTrace();
}
return strResult;
}

另附上map转为xml和json的方法:

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import com.alibaba.fastjson.JSONObject;

   /**
* 将map转换为xml
* @param map
*/
private static String convertMap2Xml(Map<String,String> map) {
Set<Entry<String,String>> entrys = map.entrySet();
Iterator<Entry<String,String>> iter = entrys.iterator();
Document doc = DocumentHelper.createDocument();
Element root = DocumentHelper.createElement("xml");
while(iter.hasNext()) {
Entry<String,String> entry = iter.next();
Element key = DocumentHelper.createElement(entry.getKey());
key.addCDATA(entry.getValue());
root.add(key);
}
doc.add(root);
return doc.asXML();
}   /**
* 将map转换为json
* @param map
*/
private static String convertMap2Json(Map<String,String> map) {
JSONObject json = JSONObject.parseObject(map.toString());
return json.toString();
}

http接受json格式的数据

public String getJsonData(HttpServletRequest request) {
System.out.println(request.getCharacterEncoding());
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();
}
 

[java,2018-01-16] HttpClient发送、接收 json 请求的更多相关文章

  1. [NIO]用dawn发送接收HTTP请求

    HTTP协议的下层使用的是tcp.所以我们建立一个tcp连接就能发送接收http请求.dawn底层使用了nio.可是经过dawn的封装之后,我们在编写代码的时候,就和使用普通的堵塞式socket一样 ...

  2. org.apache.httpcomponents httpclient 发起HTTP JSON请求

    1. pom.xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactI ...

  3. HttpClient发送get post请求和数据解析

    最近在跟app对接的时候有个业务是微信登录,在这里记录的不是如何一步步操作第三方的,因为是跟app对接,所以一部分代码不是由我写,我只负责处理数据,但是整个微信第三方的流程大致都差不多,app端说要传 ...

  4. 使用HttpClient发送Get/Post请求 你get了吗?

    HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 ...

  5. jQuery 发送 ajax json 请求。。

    $.extend({ postJson: function (data) { data = data || {} $.ajax({ type: "POST", url: data. ...

  6. android发送/接收json数据

    客户端向服务器端发送数据,这里用到了两种,一种是在url中带参数,一种是json数据发送方式: url带参数的写法: url+/?r=m/calendar/contact_list&uid=3 ...

  7. android发送/接收Json包含中文的处理

    转自:http://wiki.neal365.com/2013/02/25/android%E5%8F%91%E9%80%81%E6%8E%A5%E6%94%B6json%E5%8C%85%E5%90 ...

  8. java 基于tcp客户端服务端发送接收数据

    客户端: package demo03; import java.io.IOException; import java.io.InputStream; import java.io.OutputSt ...

  9. 使用HttpRequester模拟发送及接收Json请求

    1.开发人员在火狐浏览器里经常使用的工具有Firebug,httprequester,restclient......火狐浏览器有一些强大的插件供开发人员使用!需要的可以在附加组件中扩展. 2.htt ...

随机推荐

  1. DevExpress GridView 那些事儿

    1:去除 GridView 头上的 "Drag a column header here to group by that column" -->  点击 Run Desig ...

  2. NET设计模式 第二部分 结构性模式(14):结构型模式专题总结

    ——探索设计模式系列之十五 Terrylee,2006年5月 摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能( ...

  3. PxCook 像素大厨 标注切图,一起搞定!专注设计本质

    http://www.fancynode.com.cn/pxcook

  4. flume 架构设计优化

    对于企业中常用的flume type 概括如下:ource(获取数据源): exec (文件) spoolingdir (文件夹) taildir(文件夹及文件的变动) kafka syslog ht ...

  5. ionic popup 做法及样式修改

    ionic popup的做法很简单,一共有三种:show.confirm和alert,官网上讲得很详细. 一.confirm: js:var confirmPopup = $ionicPopup.co ...

  6. aircrack 破解wifi密码

    分享一个用aircrack破解wifi密码的步骤: 1.新建一个终端 airmon-ng check kill airmon-ng start wlan0 airodump-ng wlan0mon 此 ...

  7. C#中数据库事务、存储过程基本用法

    SQL 事务 public bool UpdateQsRegisterSql(List<string> ids, int newQueueId, string newQueueName) ...

  8. 黄聪:bootstrap的模态框modal插件在苹果iOS Safari下光标偏离问题解决方案

    一行CSS代码搞定: body.modal-open { position: fixed; width: 100%; }

  9. C++11--Tuple类<tuple>

    #include "stdafx.h" #include <iomanip> #include <condition_variable> #include ...

  10. python接口自动化20-requests获取响应时间(elapsed)与超时(timeout) ok试了 获取响应时间的

    前言 requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的.如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 关于request ...