[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 ...
随机推荐
- centos 6,7 上cgroup资源限制使用举例
在Centos6,7使用cgroup做内存限制,使用的配置包是libcgroup,具体方案和操作步骤如下. 步骤1:安装配置管理包 Centos 6: # yum install libcgroup ...
- IIC总线初识
IIC总线初识 IIC总线的拓扑结构 八位数据分布: 写操作: 读操作: IIC总线的工作频率: IIC总线的时序(重要): 起始位的时序: 用verilog代码描述这一过程: 此处是用来描述SDA信 ...
- SDI视频采集过程
SDI视频采集过程 GTP收发模块为视频采集系统的核心部分,包含发送和接收,完成对信号的解串和串码.并且HD-SDI信号中并非所有的信号都是有效视频信号,这部分功能由数据分析模块实现,并将提取出来的有 ...
- golang语言并发与并行——goroutine和channel的详细理解(一) 转发自https://blog.csdn.net/skh2015java/article/details/60330785
如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人. Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据. ...
- mac系统 Xcode打包ionic项目(iOS)
一.环境搭建 1. 安装Node.js,使用node -v 查询版本号: 2. 安装ionic: $ sudo npm install -g cordova(可以指定版本,如cordova@7.0.1 ...
- 《JavaScript设计模式与开发》笔记 1.面向对象的JavaScript
多态 封装 原型模式 基于原型模式的继承javascript对象 1.多态 多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果.换句话说,给不同的对象发哦少年宫同一个消 ...
- ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) { OS_ERR err; CPU_INT08U isTheFirstCh; O ...
- mysql 事务学习
1.事务 逻辑上的一组操作,组成这组操作的各个逻辑单元要么一起成功,要么一起失败. 2.事务特性 原子性:强调事务的不可分割.一致性:强调的是事务的执行的前后,数据的完整性要保持一致.隔离性:一个事务 ...
- Java使用 SFTP实现文件上传下载
package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...
- LeetCode——15. 3Sum
一.题目链接:https://leetcode.com/problems/3sum/ 二.题目大意: 3和问题是一个比较经典的问题,它可以看做是由2和问题(见http://www.cnblogs.co ...