HttpClient之实现POST方法
来源:互联网 发布:ubuntu中查看文件夹 编辑:程序博客网 时间:2024/05/16 16:24
- 实现方法
- POST方法重要部分说明
- 代码
实现方法
使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。
1. 创建HttpClient对象。
2. 创建请求方法的实例:HttpGet对象或HttpPost,并指定请求URL。
3. 设置配置参数,通过RequestConfig可以配置连接超时时间、Socket超时时间等重要参数
4. 设置请求参数,HttpGet、HttpPost使用setParams(HttpParams params)添加请求参数;HttpPost还可用setEntity(HttpEntity entity)方法来添加请求参数。
5. 调用HttpClient.execute(HttpUriRequest request)发送请求,响应结果封装于HttpResponse。
6. HttpResponse.getAllHeaders()、getHeaders(String name)方法可获取响应头;HttpResponse.getEntity()可获取响应结果;HttpResponse.getStatusLine可获取响应状态码
7. 将字节流转换成字符串
8. 释放http连接(重要)
POST方法重要部分说明
- 通过costTime记录请求响应具体时间,方便后续监控执行时间
- 通过service字段记录此方法调用方,通过记录日志可以统计调用方qps
- 异常细化处理,该方法可捕捉ConnectTimeoutException、 SocketTimeoutException异常,正对此类异常可以专门监控统计(此类异常出现,要么是网络抖动,要么是对方服务宕机,会导致严重后果,需要特殊处理)
代码
public static String doPost(String service,String url, Map<String, String> params,Map<String,String> headers,int timeout) { //通过service字段,打印日志, 方便统计qps logger.info("begin http call service={},method={},url={}",service,"post",url); CloseableHttpClient httpclient = null; CloseableHttpResponse response = null; //记录请求响应时间 long costTime = 0; String result = null; try { long start = System.currentTimeMillis(); //1、创建HttpClient httpclient = HttpClients.createDefault(); //2、指定URL创建HttpPost HttpPost httpPost = new HttpPost(url); //3、设置配置:连接超时时间和Socket超时时间 RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout).setSocketTimeout(timeout).build(); httpPost.setConfig(config); //4、设置请求参数 List<NameValuePair> nvps = new ArrayList<>(); if(params != null && params.keySet().size() > 0) { for(Map.Entry<String, String> entry : params.entrySet()) { nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } } httpPost.setEntity(new UrlEncodedFormEntity(nvps)); //4、设置请求Headers if (headers != null && headers.keySet().size() > 0) { for (Map.Entry<String, String> entry : headers.entrySet()) { httpPost.setHeader(entry.getKey(),entry.getValue()); } } //5、执行POST方法,获取响应结果 response = httpclient.execute(httpPost); //6、获取响应状态码 StatusLine statusLine = response.getStatusLine(); if (statusLine.getStatusCode() != 200) { logger.info("[doPost]request url:{} post params :{} statusCode:{} ", url, params, statusLine.getStatusCode()); return null; } //6、获取响应内容 HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); //7、将字节流转换成字符串 StringBuilder sb = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } is.close(); reader.close(); result = sb.toString(); EntityUtils.consume(entity); long end = System.currentTimeMillis(); costTime = end - start; return result; } catch (ConnectTimeoutException e) { //连接超时异常需专门监控 logger.warn("[doPost]Connect timed out service={},url={},params={},exception={}",service, url, params, e); return null; } catch (SocketTimeoutException e) { //Socket读异常需专门监控 logger.warn("[doPost]Read timed out service={},url={} params={} exception={}",service, url, params, e); return null; } catch (Exception e) { logger.warn("[doPost]request service={},url={} params={} exception={}",service, url, params, e); return null; } finally { //8、释放连接 try { if(response != null) { response.close(); } if(httpclient != null) { httpclient.close(); } catch (IOException e) { logger.warn("[doPost]request url:{} params :{} close response exception", url, params); } logger.info("end http call service={},costTime={},method={},url={},params={},result={}", service, costTime, "post", url, params, result); } }
0 0
- HttpClient之实现POST方法
- HttpClient之post方法和HttpUrlConnection之Get方法
- HttpClient中的POST方法
- HttpClient的post方法
- httpclient(Post方法)
- httpClient之Post请求
- HttpClient之Post通信与服务器连接实现登陆功能
- httpClient Post传参方法
- httpClient+post+xml简单实现
- Curl之【get/post】简单方法实现
- Android开发 httpClient post方法请求tomcat服务器实现注册登陆
- Android开发 httpclient Post方法实现从tomcat服务器(JSP)获取listview信息
- Android开发 httpClient post方法请求tomcat服务器实现注册登陆
- HttpClient Post请求两种方法。
- HttpClient GET POST DELETE方法使用
- HttpClient的Post和Get方法
- 基于HttpClient 4.3的通用POST方法
- HttpClient应用案例post&get方法
- c#Bug Unknown column “张三” in 'where clause'问题解决
- 数据库相关中间件收录集
- Compile,Make和Build的区别
- 我认可的数码品牌
- 161009
- HttpClient之实现POST方法
- Spark中RDD操作
- mysql中文乱码解决
- python time,datetime 操作
- 将php数组或者对象传递给js
- operator重载运算符
- Android在任何地方模拟点击屏幕
- javascript 属性的特性 二十五
- setTimeout延时0毫秒的作用