[java,2018-01-16] HttpClient发送、接收 json 请求
最近需要用到许多在后台发送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 请求的更多相关文章
- [NIO]用dawn发送接收HTTP请求
HTTP协议的下层使用的是tcp.所以我们建立一个tcp连接就能发送接收http请求.dawn底层使用了nio.可是经过dawn的封装之后,我们在编写代码的时候,就和使用普通的堵塞式socket一样 ...
- org.apache.httpcomponents httpclient 发起HTTP JSON请求
1. pom.xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactI ...
- HttpClient发送get post请求和数据解析
最近在跟app对接的时候有个业务是微信登录,在这里记录的不是如何一步步操作第三方的,因为是跟app对接,所以一部分代码不是由我写,我只负责处理数据,但是整个微信第三方的流程大致都差不多,app端说要传 ...
- 使用HttpClient发送Get/Post请求 你get了吗?
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 ...
- jQuery 发送 ajax json 请求。。
$.extend({ postJson: function (data) { data = data || {} $.ajax({ type: "POST", url: data. ...
- android发送/接收json数据
客户端向服务器端发送数据,这里用到了两种,一种是在url中带参数,一种是json数据发送方式: url带参数的写法: url+/?r=m/calendar/contact_list&uid=3 ...
- 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 ...
- java 基于tcp客户端服务端发送接收数据
客户端: package demo03; import java.io.IOException; import java.io.InputStream; import java.io.OutputSt ...
- 使用HttpRequester模拟发送及接收Json请求
1.开发人员在火狐浏览器里经常使用的工具有Firebug,httprequester,restclient......火狐浏览器有一些强大的插件供开发人员使用!需要的可以在附加组件中扩展. 2.htt ...
随机推荐
- Java MyBatis insert数据库数据后返回主键
<selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER&quo ...
- 细看Thread的 start() 和 run()方法
1.start(): 我们先来看看API中对于该方法的介绍: 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 结果是两个线程并发地运行:当前线程(从调用返回给 start 方法)和另一 ...
- JFrame关闭程序就退出的设置
要是实现JFrame 关闭后程就退出或者停止可以调用setDefaultCloseOperation() 方法. 入下图程序 package ltb6w; import javax.swing.*; ...
- Maven 专题
目录: Maven的安装 Eclipse安装Maven插件 Nexus私服搭建 Maven+Nexus配置 发布自己的构件(至Nexus) 创建maven多模块工程group 整理中[...] 先放一 ...
- mysql获取某个表的所有属性名及其数据
MYSQL类实现从数据库相应的表中获取所有属性及其数据,数据为元组类型.返回结果存放在字典中 import pymysql class MYSQL: def __init__(self): pass ...
- Flume的基本概念
Flume 概念 Flume 最早是Cludera提供的日志收集系统,后贡献给Apache.所以目前是Apache下的项目,Flume支持在日志系统中指定各类数据发送方,用于收集数据. Flume 是 ...
- 字符串分割split()
知识讲解: split() 方法将字符串分割为字符串数组,并返回此数组. 语法: stringObject.split(separator,limit) 参数说明: 注意:如果把空字符串 (" ...
- 学习笔记之Nginx
NGINX | High Performance Load Balancer, Web Server, & Reverse Proxy https://www.nginx.com/ flawl ...
- dubbo服务telnet命令
转载 https://www.cnblogs.com/feiqihang/p/4387330.html dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本 ...
- 集合之map详解(遍历)
13.简单介绍Map 12.Map排序(TreeMap的key排序,TreeMap的value排序:HashMap的value排序:) 11.map集合的6种遍历方式 ============= 2 ...