文档章节

HTTP get、post 中请求json与map传参格式

寒风中的独狼
 寒风中的独狼
发布于 10/22 12:04
字数 716
阅读 16
收藏 0
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;

public class HttpUtils {

	
	private transient static Logger log = LoggerFactory.getLogger(HttpUtils.class);
	
	
	public static String doGet(String url, Map<String,String> param){
		//创建HttpClient对象
		CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse httpResponse = null;
        try {
        	//创建uri
        	URIBuilder builder = new URIBuilder(url);
            if(param!=null && !param.isEmpty()){
            	for(String key :param.keySet()){
            		builder.addParameter(key, param.get(key));
            	}
            }
            URI uri = builder.build();
            // 创建httpGet请求
            HttpGet httpGet = new HttpGet(uri);
            
            // 开始执行http请求
            long startTime = System.currentTimeMillis();
            httpResponse = httpclient.execute(httpGet);
            long endTime = System.currentTimeMillis();
            
            // 获得响应状态码
            int statusCode = httpResponse.getStatusLine().getStatusCode();  
            log.info("调用API花费时间(单位:毫秒):" + (endTime - startTime));
            
            // 取出应答字符串
            HttpEntity httpEntity = httpResponse.getEntity();
            resultString = EntityUtils.toString(httpEntity,Charset.forName("UTF-8"));
            // 去掉返回结果中的"\r"字符,否则会在结果字符串后面显示一个小方格
            resultString.replaceAll("\r", "");
            
            // 判断返回状态是否为200
            if (statusCode != HttpStatus.SC_OK) {
            	throw new RuntimeException(String.format("\n\tStatus:%s\n\tError Message:%s", statusCode,resultString));
            }
        } catch (ClientProtocolException e) {
            log.error(e.getMessage(), e);
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        } catch (URISyntaxException e) {
        	log.error(e.getMessage(), e);
		} finally{
            try {
            	if(httpResponse != null){
            		httpResponse.close();
            	}
            	httpclient.close();
			} catch (IOException e) {
				log.error(e.getMessage(), e);
			}
        }
        return resultString;
    }
	
	public static String doGet(String url){
		return doGet(url,null);
	}
	
	public static String doPost(String url, Map<String,Object> param) throws HttpHostConnectException,IOException{
		//创建HttpClient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse httpResponse = null;
        try {
        	// 创建HttpPost对象
            HttpPost httpPost = new HttpPost(url);
            
            if(param!=null && !param.isEmpty()){
            	List<NameValuePair> params = new ArrayList<NameValuePair>();
            	for(String key :param.keySet()){
            		params.add(new BasicNameValuePair(key, param.get(key)==null?"":param.get(key).toString()));
            	}
            	httpPost.setEntity(new UrlEncodedFormEntity(params, Charset.forName("UTF-8")));
            }
            
            //设置请求和传输超时时间
            RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build();
            httpPost.setConfig(requestConfig);
            
            // 开始执行http请求
            long startTime = System.currentTimeMillis(); 
            httpResponse = httpclient.execute(httpPost);
            long endTime = System.currentTimeMillis();
            
            // 获得响应状态码
            int statusCode = httpResponse.getStatusLine().getStatusCode();  
            log.info("调用API花费时间(单位:毫秒):" + (endTime - startTime));
            
            // 取出应答字符串
            HttpEntity httpEntity = httpResponse.getEntity();
            resultString = EntityUtils.toString(httpEntity,Charset.forName("UTF-8"));
            
            // 判断返回状态是否为200
            if (statusCode != HttpStatus.SC_OK) {
            	throw new RuntimeException(String.format("\n\tStatus:%s\n\tError Message:%s", statusCode,resultString));
            } 
            
            //对返回结果进行非空校验
            if (StringUtils.isBlank(resultString)||StringUtils.equals(StringUtils.trim(resultString), "null")) {
                log.error("被调用系统响应参数:{}",resultString);
                resultString = "{'code':100005,'msg':'响应不合法!'}";
            }
        } catch (ClientProtocolException e) {
            log.error(e.getMessage(), e);
        } finally{
            try {
            	if(httpResponse != null){
            		httpResponse.close();
            	}
            	httpclient.close();
			} catch (IOException e) {
				log.error(e.getMessage(), e);
			}
        }
		return resultString;
    }

	public static String doJsonPost(String url, Map<String, Object> param) {
		String resultString = "";
		if (param != null && !param.isEmpty()) {
			String json = JSON.toJSONString(param);
			resultString = doJsonPost(url, json);
		} else {
			resultString = doJsonPost(url, "");
		}
		return resultString;
	}

	public static String doJsonPost(String url, String json) {
		// 创建HttpClient对象
		CloseableHttpClient httpclient = HttpClients.createDefault();
		String resultString = "";
		CloseableHttpResponse httpResponse = null;
		try {
			// 创建HttpPost对象
			HttpPost httpPost = new HttpPost(url);
			httpPost.setEntity(new StringEntity(json,
					ContentType.APPLICATION_JSON));

			// 开始执行http请求
			long startTime = System.currentTimeMillis();
			httpResponse = httpclient.execute(httpPost);
			long endTime = System.currentTimeMillis();

			// 获得响应状态码
			int statusCode = httpResponse.getStatusLine().getStatusCode();
			log.info("调用API 花费时间(单位:毫秒):" + (endTime - startTime));

			// 取出应答字符串
			HttpEntity httpEntity = httpResponse.getEntity();
			resultString = EntityUtils.toString(httpEntity,
					Charset.forName("UTF-8"));

			// 判断返回状态是否为200
			if (statusCode != HttpStatus.SC_OK) {
				throw new RuntimeException(String.format(
						"\n\tStatus:%s\n\tError Message:%s", statusCode,
						resultString));
			}
		} catch (ClientProtocolException e) {
			log.error(e.getMessage(), e);
		} catch (IOException e) {
			log.error(e.getMessage(), e);
		} finally {
			try {
				if (httpResponse != null) {
					httpResponse.close();
				}
				httpclient.close();
			} catch (IOException e) {
				log.error(e.getMessage(), e);
			}
		}
		return resultString;
	}
	
}

 

© 著作权归作者所有

共有 人打赏支持
寒风中的独狼
粉丝 0
博文 18
码字总数 3834
作品 0
崇明
私信 提问
springMVC的数据绑定

springMVC的数据绑定 1. 基本类型 1.1 比如int和Integer如何去选择作为Controller方法的入参 1.2 在入参上加上注解@RequestParam, 1.3 @RequestParam注解几个设置 1.3.1 value如何应用,valu...

新年
2016/07/08
47
0
使用 Postman 与 Kotlin 交互REST API接口数据

在前面2篇文章使用 Kotlin 和Spring Boot 2.0快速开发REST API接口和使用 Kotlin 和Spring Boot 2.0快速开发REST API客户端介绍了如何使用简单代码快速实现REST API的服务端接口及客户端应用...

B超
09/11
0
0
ajax中get和post的提交、却别、错误处理以及注意事项

<!doctype html><html><head> <meta charset="UTF-8"> <title>Document</title></head><body> $.get和$.post的不同 1、get通过url提交的,post是通过http消息实体提交的 2、get提交大小限制为......

文文1
2015/12/03
73
0
Spring MVC的controller层如何获取到请求的数据

版权声明:本文为博主原创文章,转载请注明出处,尊重劳动成果,谢谢~ https://blog.csdn.net/zhanglf02/article/details/78470375 javaweb应用开发,最常用到的就是应用之间的信息交互,调用...

徐风来
11/11
0
0
180730-Spring之RequestBody的使用姿势小结

Spring之RequestBody的使用姿势小结 SpringMVC中处理请求参数有好几种不同的方式,如我们常见的下面几种 根据 对象获取 根据 注解获取url参数 根据 注解获取请求参数 根据Bean的方式获取请求...

小灰灰Blog
07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
17分钟前
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
35分钟前
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
今天
1
0
【分享实录】BANCOR算法详解及代码实现

1 活动基本信息 1)主题:【区块链技术工坊22期】BANCOR算法详解及代码实现 2)议题: BANCOR算法的特点和优劣势 BANCOR算法和举例 如何加入BANCOR.NETWORK交易所 如何开发自己的BANCOR去中心...

HiBlock
今天
2
0
微信小程序(2)

开始看微信小程序的教程了。刚刚看完官方教程的视图层部分。这里摘录一些自己认为的部分关键点。 1.直接修改数值无法重新渲染,需要使用setData()方法; 2.列表渲染中:wx:key用于保持项目在...

MKjy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部