美文网首页
HttpClient学习笔记

HttpClient学习笔记

作者: 青年心路 | 来源:发表于2019-08-03 19:20 被阅读0次
    一、HttpClient简介

    HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持Http协议最新版本和建议。
    HTTP协议可能是Internet中使用最多、最重要的协议了,越来越多的Java应用程序需要使用HTTP协议。虽然JDK的java.net包中已经提供了访问HTTP协议的基本功能,但是功能还不是很强大。

    二、HttpClient的应用
    1.发送Get请求不带参数
    1.1 创建项目

    httpClientDemo

    1.2 添加依赖
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
    </dependency>
    
    1.3 编写测试代码
        @Test
        public void doGet() throws IOException {
            //创建HttpClient对象
            CloseableHttpClient client = HttpClients.createDefault();
            //创建get请求对象,在请求中输入url
            HttpGet get = new HttpGet("http://www.baidu.com");
            //发送请求并返回响应
            CloseableHttpResponse res = client.execute(get);
    
            //处理响应
            //获取响应状态码
            int code = res.getStatusLine().getStatusCode();
            System.out.println(code);
    
            //获取响应内容
            HttpEntity entity = res.getEntity();
            String str = EntityUtils.toString(entity, "UTF-8");
            System.out.println(str);
    
            //关闭client
            client.close();
        }
    
    2.发送Get请求带参数
        @Test
        public void doGetParam() throws URISyntaxException, IOException {
            CloseableHttpClient client = HttpClients.createDefault();
            //创建封装URI的对象,在该对象中可以给定参数
            URIBuilder builder = new URIBuilder("https://www.sogou.com/web");
            builder.addParameter("query", "西游记");
            //创建Get请求对象
            HttpGet get = new HttpGet(builder.build());
    
            //发送请求并返回响应
            CloseableHttpResponse res = client.execute(get);
    
            //处理响应
            //获取响应状态码
            int code = res.getStatusLine().getStatusCode();
            System.out.println(code);
    
            //获取响应内容
            HttpEntity entity = res.getEntity();
            String str = EntityUtils.toString(entity, "UTF-8");
            System.out.println(str);
    
            //关闭client
            client.close();
        }
    
    3.发送Post请求不带参数
        @Test
        public void doPost() throws IOException {
            CloseableHttpClient client = HttpClients.createDefault();
            HttpPost post = new HttpPost("http://localhost:8080/test/post");
            CloseableHttpResponse res = client.execute(post);
    
            int code = res.getStatusLine().getStatusCode();
            System.out.println(code);
    
            HttpEntity entity = res.getEntity();
            String str = EntityUtils.toString(entity);
            System.out.println(str);
    
            client.close();
        }
    
    4.发送Post请求带参数
        @Test
        public void doPostParam() throws IOException {
            CloseableHttpClient client = HttpClients.createDefault();
            HttpPost post = new HttpPost("http://localhost:8080/test/postParam");
    
            //给定参数
            List<BasicNameValuePair> list = new ArrayList<>();
            list.add(new BasicNameValuePair("name", "张三丰"));
            list.add(new BasicNameValuePair("pwd", "123"));
    
            //将给定的参数转换成字符串,通过http数据包传递过去(需要指定编码,默认使用GBK编码)
            StringEntity se = new UrlEncodedFormEntity(list,"UTF-8");
            //向请求中绑定参数
            post.setEntity(se);
    
            CloseableHttpResponse res = client.execute(post);
    
            int code = res.getStatusLine().getStatusCode();
            System.out.println(code);
    
            HttpEntity entity = res.getEntity();
            String str = EntityUtils.toString(entity);
            System.out.println(str);
    
            client.close();
        }
    
    5.在Post请求参数中传递Json格式数据
        @Test
        public void doPostParamJson() throws IOException {
            CloseableHttpClient client = HttpClients.createDefault();
            HttpPost post = new HttpPost("http://localhost:8080/test/postParamJson");
            String json = "{\"name\":\"张三丰\",\"pwd\":\"123\"}";
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            //数据绑定
            post.setEntity(entity);
    
            //处理响应
            CloseableHttpResponse res = client.execute(post);
    
            int code = res.getStatusLine().getStatusCode();
            System.out.println(code);
    
            HttpEntity httpEntity = res.getEntity();
            String str = EntityUtils.toString(httpEntity, "UTF-8");
            System.out.println(str);
    
            client.close();
        }
    
    6.编写HttpClient的工具类
    public class HttpClientUtil {
    
        public static String doGet(String url, Map<String, String> param) {
    
            // 创建Httpclient对象
            CloseableHttpClient httpclient = HttpClients.createDefault();
    
            String resultString = "";
            CloseableHttpResponse response = null;
            try {
                // 创建uri
                URIBuilder builder = new URIBuilder(url);
                if (param != null) {
                    for (String key : param.keySet()) {
                        builder.addParameter(key, param.get(key));
                    }
                }
                URI uri = builder.build();
    
                // 创建http GET请求
                HttpGet httpGet = new HttpGet(uri);
    
                // 执行请求
                response = httpclient.execute(httpGet);
                // 判断返回状态是否为200
                if (response.getStatusLine().getStatusCode() == 200) {
                    resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (response != null) {
                        response.close();
                    }
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return resultString;
        }
    
        public static String doGet(String url) {
            return doGet(url, null);
        }
    
        public static String doPost(String url, Map<String, String> param) {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";
            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);
                // 创建参数列表
                if (param != null) {
                    List<NameValuePair> paramList = new ArrayList<>();
                    for (String key : param.keySet()) {
                        paramList.add(new BasicNameValuePair(key, param.get(key)));
                    }
                    // 模拟表单
                    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"utf-8");
                    httpPost.setEntity(entity);
                }
                // 执行http请求
                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return resultString;
        }
    
        public static String doPost(String url) {
            return doPost(url, null);
        }
        
        public static String doPostJson(String url, String json) {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";
            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);
                // 创建请求内容
                StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
                httpPost.setEntity(entity);
                // 执行http请求
                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return resultString;
        }
    }
    
    7.测试HtppClientUtil
        @Test
        public void httpClientUtilTest(){
            String url = "http://localhost:8080/test/postParam";
            Map<String, String> map = new HashMap<>();
            map.put("name", "alice");
            map.put("pwd", "123");
            String str = HttpClientUtil.doPost(url, map);
            System.out.println(str);
        }
    
    三、实战案例
    1.需求:
    • 采用SOA架构项目
    • 使用HttpClient调用服务
    • 完成用户的添加和查询
    2.项目架构
    image.png
    3.创建表
    CREATE TABLE `users` (
     `userid` int(11) NOT NULL AUTO_INCREMENT,
     `username` varchar(30) DEFAULT NULL,
     `userage` int(11) DEFAULT NULL,
     PRIMARY KEY (`userid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    
    4.创建项目
    4.1 项目名称

    commons

    4.2 添加依赖
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </dependency>
        </dependencies>
    
    4.3 项目名称

    service

    4.4 添加依赖
    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>httpClientParent</artifactId>
            <groupId>com.hxx</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>service</artifactId>
        <packaging>war</packaging>
    
        <name>service Maven Webapp</name>
        <!-- FIXME change it to the project's website -->
        <url>http://www.example.com</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.hxx</groupId>
                <artifactId>commons</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <!--日志-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </dependency>
    
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
            </dependency>
    
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <!--连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </dependency>
    
            <!--spring-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
            </dependency>
    
            <!--javaee-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.xml</include>
                        <include>**/*.properties</include>
                    </includes>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <configuration>
                        <path>/</path>
                        <port>9090</port>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
    4.5 项目名称

    client

    4.6 添加依赖
    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>httpClientParent</artifactId>
            <groupId>com.hxx</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>client</artifactId>
        <packaging>war</packaging>
    
        <name>client Maven Webapp</name>
        <!-- FIXME change it to the project's website -->
        <url>http://www.example.com</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.hxx</groupId>
                <artifactId>commons</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <!--日志-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </dependency>
    
            <!--spring-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
            </dependency>
    
            <!--javaee-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jsp-api</artifactId>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
    
        </dependencies>
    
        <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <configuration>
                        <path>/</path>
                        <port>9091</port>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
    5.添加用户

    6.查询用户

    相关文章

      网友评论

          本文标题:HttpClient学习笔记

          本文链接:https://www.haomeiwen.com/subject/tatjdctx.html