后台发送请求,HttpClient的post,get各种请求,带header的请求

摘要:
HttpClient依赖于jar包:<dependency><groupId>org。阿帕奇。httpcomponentshttpclient4.5.2编写一个工具类HttpUtilpackagecom。英国广播公司。用于发送请求的utils;导入java.io.Bu

HttpClient依赖jar包:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

写一个发送请求的工具类HttpUtil

package com.bs.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
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.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
 
/**
 * HttpClient工具类
 */
public class HttpUtil {
    
    private static Logger logger = Logger.getLogger(HttpUtil.class);
 
    /**
     * get请求
     * @return
     */
    public static String doGet(String url) {
        try {
            HttpClient client = new DefaultHttpClient();
            //发送get请求
            HttpGet request = new HttpGet(url);
            HttpResponse response = client.execute(request);
 
            /**请求发送成功,并得到响应**/
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                /**读取服务器返回过来的json字符串数据**/
                String strResult = EntityUtils.toString(response.getEntity());
                
                return strResult;
            }
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
        
        return null;
    }
    
    /**get请求(用于key-value格式的参数,且带有header请求头)
     * @param url            
     * @param map            请求的参数map<key,value>键值对
     * @param headerKey        headers Key
     * @param headerValue    headers Value
     * @return
     */
    public static String doGet(String url,Map<String, String> map,String headerKey,String headerValue) {
        // 获取连接客户端工具
        CloseableHttpClient httpClient = HttpClients.createDefault();
     
        String entityStr = null;
        CloseableHttpResponse response = null;
     
        try {
            /*
             * 由于GET请求的参数都是拼装在URL地址后方,所以我们要构建一个URL,带参数
             */
            URIBuilder uriBuilder = new URIBuilder(url);
            /** 第一种添加参数的形式 */
            /*uriBuilder.addParameter("name", "root");
            uriBuilder.addParameter("password", "123456");*/

            for (Map.Entry<String, String> entry : map.entrySet()) { 
                  uriBuilder.addParameter(entry.getKey(), entry.getValue());
                }
            
            
            /** 第二种添加参数的形式 */
            /* List<NameValuePair> list = new LinkedList<>();
            BasicNameValuePair param1 = new BasicNameValuePair("startTime", "2019-1-1 00:00:00");
            BasicNameValuePair param2 = new BasicNameValuePair("endTime", "2019-1-9 00:00:00");
            list.add(param1);
            list.add(param2);
            uriBuilder.setParameters(list);*/
     
            // 根据带参数的URI对象构建GET请求对象
            HttpGet httpGet = new HttpGet(uriBuilder.build());
     
            /* 
             * 添加请求头信息
             */
            // 浏览器表示
            httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)");
            // 传输的类型
            httpGet.addHeader("Content-Type", "application/x-www-form-urlencoded");
            //header的<key,value>
            httpGet.setHeader(headerKey, headerValue);
            
            // 执行请求
            response = httpClient.execute(httpGet);
            // 获得响应的实体对象
            HttpEntity entity = response.getEntity();
            // 使用Apache提供的工具类进行转换成字符串
            entityStr = EntityUtils.toString(entity, "UTF-8");
        } catch (ClientProtocolException e) {
            System.err.println("Http协议出现问题");
            e.printStackTrace();
        } catch (ParseException e) {
            System.err.println("解析错误");
            e.printStackTrace();
        } catch (URISyntaxException e) {
            System.err.println("URI解析异常");
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("IO异常");
            e.printStackTrace();
        } finally {
            // 释放连接
            if (null != response) {
                try {
                    response.close();
                    httpClient.close();
                } catch (IOException e) {
                    System.err.println("释放连接出错");
                    e.printStackTrace();
                }
            }
        }
        return entityStr;
    }
    
    
    
    
    /**
     * post请求(用于key-value格式的参数)
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, Map params){
        
        BufferedReader in = null;  
        try {  
            // 定义HttpClient  
            HttpClient client = new DefaultHttpClient();  
            // 实例化HTTP方法  
            HttpPost request = new HttpPost();  
            request.setURI(new URI(url));
            //设置参数
            List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
            for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
                String name = (String) iter.next();
                String value = String.valueOf(params.get(name));
                nvps.add(new BasicNameValuePair(name, value));
                
                //System.out.println(name +"-"+value);
            }
            request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));
            
            HttpResponse response = client.execute(request);  
            int code = response.getStatusLine().getStatusCode();
            if(code == 200){    //请求成功
                in = new BufferedReader(new InputStreamReader(response.getEntity()  
                        .getContent(),"utf-8"));
                StringBuffer sb = new StringBuffer("");  
                String line = "";  
                String NL = System.getProperty("line.separator");  
                while ((line = in.readLine()) != null) {  
                    sb.append(line + NL);  
                }
                
                in.close();  
                
                return sb.toString();
            }
            else{    //
                System.out.println("状态码:" + code);
                return null;
            }
        }
        catch(Exception e){
            e.printStackTrace();
            
            return null;
        }
    }
    
    /**
     * post请求(用于请求json格式的参数)
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, String params) throws Exception {
        
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);// 创建httpPost   
        httpPost.setHeader("Accept", "application/json"); 
        httpPost.setHeader("Content-Type", "application/json");
        String charSet = "UTF-8";
        StringEntity entity = new StringEntity(params, charSet);
        httpPost.setEntity(entity);        
        CloseableHttpResponse response = null;
        
        try {
            
            response = httpclient.execute(httpPost);
            StatusLine status = response.getStatusLine();
            int state = status.getStatusCode();
            if (state == HttpStatus.SC_OK) {
                HttpEntity responseEntity = response.getEntity();
                String jsonString = EntityUtils.toString(responseEntity);
                return jsonString;
            }
            else{
                 logger.error("请求返回:"+state+"("+url+")");
            }
        }
        finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    
}

免责声明:文章转载自《后台发送请求,HttpClient的post,get各种请求,带header的请求》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浏览器的渲染页面过程和重排、重绘Android学习笔记12:图像渲染(Shader)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 6.0新特性

C#6.0新特性  一、C#发展历程 一、C#6.0新特性 转自:https://www.cnblogs.com/yinrq/p/5600530.html 1、字符串插值 (String Interpolation) 字符串拼接优化 Before: var Name = "joye.net"; var Results = "Hello" + Name;/...

Kafka消费者-从Kafka读取数据

(1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe)。 队列的处理方式是一组消费者从服务器读取消息,一条消息只由其中的一个消费者来处理。 发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。 (2)Kafka的消费者和消...

Jsoup+FastJson制作新闻数据接口-Demo

【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】 经常用到 编写出来直接拿来用 这个适合在服务端结合servlet来做接口:需要下载jsoup+fastjson两个包. Jsoup使用手册:http://www.open-open.com/js...

Hibernate 入门

Hibernate  入门 1. 什么是hibernate ORM框架/持久层框架 jdbc的一个框架 object reference mapping 通过管理对象来改变数据库中的数据 通过管理对象来操作数据库 mybatis 优势:跨数据库的无缝移植 2. 如何在项目中添加hibernate支持(手动添加) 在pom.xml添加hibernate相关...

java将Excel文件上传并解析为List数组

前端 //导入excel文件 layui.use('upload', function() { var upload =layui.upload; //指定允许上传的文件类型 var uploadInst =...

从入门到实践,快速掌握 Nginx 研发

Nginx 是一种非常流行的 Web 服务器软件,全球超过 30%的网站都在 Nginx 上运行,如腾讯、淘宝、百度、京东、新浪、网易等。 对于开发来说,我们在工作中或多或少都会遇到 web 性能优化、高并发等问题,而 Nginx 是一个万能药,它具备高性能、高扩展性、高可靠性、低内存消耗等优势,不管是个人建立网站、博客,还是进行互联网应用开发,都可以轻松...