zoukankan      html  css  js  c++  java
  • 接口测试——httpclient介绍与请求方式详解

    httpClient工具介绍

    HTTP协议可能是现在lntemet上使用得最多、最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源。虽然在JDK的java.net包中已经提供了访问http协议的基木功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。HttpClient是ApaChe、JakamComnmn下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP协议的客户端编程工具包,并且它支持HTTP办议最新的版术和建议。

    httpClient工具的安装

    所需要依赖的jar包是以下三个:

    http-core-4.4.6.jar、commons-logging-1.2.jar、commons-codec-1.10.jar

    方法一:到Apache官网下载工具包,然后导入到eclipse中即可,下载地址:http://hc.apache.org/downloads.cgi

    方法二:前提条件是:eclipse要配置好Maven,在工程中的pom.xml文件中,写入代码,保存便自动下载jar包。搜索httpclient地址:http://www.mvnrepository.com/,操作如下所示:

    ①点击网址,进入首页,在搜索框中输入httpclient搜索

    ②点击搜索出来的第一个Apache HttpClient

    ③选择不同的版本,点击(本文以4.5.3版本为例)

    ④将上图红色框中的代码复制到eclipse建的Maven工程中的pom.xml文件下,操作如下图所示:

    ⑤保存pom.xml文件后,便会自动下载jar包,可在Maven工具包中查看到

    httpClient工具的主要功能

    1.实现了所有HTTP的方法(get、post、put、head等)

    2.支持自动转向

    3.支持代理服务器

    4.自动处理set-cookie中的cookie

    5.直接获取服务器发送的response code和headers

    6.设置连接超时的能力

    需要注意的是,httpclient版本的不同,功能实现的代码也就不同,需要谨慎。

    httpclient使用流程

    1. 创建HttpClient对象。

    2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求, 创建HttpGet对象; 如果需要发送POST请求,创建HttpPost对象。

    3. 如果需要发送请求参数, 可调用HttpGet、 HttpPost共同的setParams(HetpParams params)方法来添加请求参数; 对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

    4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求该方法返回一个HttpResponse。

    5. 调用HttpResponse的getAllHeaders()、 getHeaders(String name)等方法可获取服务器的响应头; 调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。 程序可通过该对象获取服务器的响应内容。

    6. 释放连接。 无论执行方法是否成功, 都必须释放连接。

    说了这么多随处可见的东西,来两个实例,分别是get和post请求操作

    get实例,url地址为百度地址,代码如下:

     1 import java.io.IOException;
     2 
     3 import org.apache.http.HttpEntity;
     4 import org.apache.http.client.ClientProtocolException;
     5 import org.apache.http.client.methods.CloseableHttpResponse;
     6 import org.apache.http.client.methods.HttpGet;
     7 import org.apache.http.impl.client.CloseableHttpClient;
     8 import org.apache.http.impl.client.HttpClients;
     9 import org.apache.http.util.EntityUtils;
    10 
    11 public class yihuqingjiu_get {
    12 
    13     public static void main(String[] args) throws ClientProtocolException, IOException{
    14         //创建httpclient对象
    15         CloseableHttpClient httpClient = HttpClients.createDefault();
    16         //创建请求方法的实例, 并指定请求url
    17         HttpGet httpget=new HttpGet("http://www.baidu.com");
    18         //获取http响应状态码
    19         CloseableHttpResponse response=httpClient.execute(httpget);
    20         HttpEntity entity=response.getEntity();
    21         //接收响应头
    22         String content=EntityUtils.toString(entity, "utf-8");
    23         System.out.println(httpget.getURI());
    24         System.out.println(content);
    25         httpClient.close();
    26     }
    27 
    28 }

    控制台显示结果如下图所示:

    带参数的post实例,url地址为禅道地址,代码如下:

     1 package com.httpclient;
     2 
     3 import java.io.IOException;
     4 import java.util.ArrayList;
     5 import java.util.List;
     6 
     7 import org.apache.http.HttpEntity;
     8 import org.apache.http.NameValuePair;
     9 import org.apache.http.client.ClientProtocolException;
    10 import org.apache.http.client.entity.UrlEncodedFormEntity;
    11 import org.apache.http.client.methods.CloseableHttpResponse;
    12 import org.apache.http.client.methods.HttpPost;
    13 import org.apache.http.impl.client.CloseableHttpClient;
    14 import org.apache.http.impl.client.HttpClients;
    15 import org.apache.http.message.BasicNameValuePair;
    16 import org.apache.http.util.EntityUtils;
    17 
    18 public class yihuqingjiu_post_1 {
    19 
    20     public static void main(String[] args) throws ClientProtocolException, IOException {
    21         
    22             CloseableHttpClient httpClient = HttpClients.createDefault();
    23             HttpPost httpPost = new HttpPost("http://127.0.0.1:81/zentao/user-login-L3plbnRhby8=.html");
    24             List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    25             nameValuePairs.add(new BasicNameValuePair("account", "admin"));
    26             nameValuePairs.add(new BasicNameValuePair("password", "LHongboss941025"));
    27             httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
    28             CloseableHttpResponse response = httpClient.execute(httpPost);
    29             HttpEntity entity = response.getEntity();
    30             String content = EntityUtils.toString(entity, "utf-8");
    31             System.out.println(content);
    32             System.out.println(httpPost.getURI());
    33             System.out.println(response);
    34             httpClient.close();
    35 
    36     }
    37 
    38 }

     控制台显示结果如下图所示:

    带参数的get请求,接口使用的是豆瓣图书,代码如下:

     1 import java.io.IOException;
     2 import java.util.ArrayList;
     3 import java.util.List;
     4 
     5 import org.apache.http.Consts;
     6 import org.apache.http.HttpEntity;
     7 import org.apache.http.NameValuePair;
     8 import org.apache.http.client.ClientProtocolException;
     9 import org.apache.http.client.entity.UrlEncodedFormEntity;
    10 import org.apache.http.client.methods.CloseableHttpResponse;
    11 import org.apache.http.client.methods.HttpGet;
    12 import org.apache.http.impl.client.CloseableHttpClient;
    13 import org.apache.http.impl.client.HttpClients;
    14 import org.apache.http.message.BasicNameValuePair;
    15 import org.apache.http.util.EntityUtils;
    16 
    17 public class yihuqingjiu_get_1 {
    18 
    19     public static void main(String[] args) throws ClientProtocolException, IOException {
    20         //创建httpclient对象
    21         CloseableHttpClient httpClient = HttpClients.createDefault();
    22         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    23         nameValuePairs.add(new BasicNameValuePair("q", "瓦尔登湖"));
    24         String str = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs,
    25         Consts.UTF_8));
    26         HttpGet httpGet = new HttpGet("https://api.douban.com/v2/book/search"+"?"+str);
    27         CloseableHttpResponse response=httpClient.execute(httpGet);
    28         HttpEntity entity=response.getEntity();
    29         //接收响应头
    30         String content=EntityUtils.toString(entity, "utf-8");
    31         System.out.println(content);
    32         httpClient.close();
    33         
    34     }
    35 
    36 }

    控制台显示结果:

    这样显示看不出什么效果,需要使用json解析工具格式化就可以,解析工具地址:http://www.bejson.com/,操作如下所示:

    ①进入网址,点击JSON相关,选择JSON视图

     

    ②将eclipse控制台的信息复制到输入框中,并点击格式化

    ③点击格式化之后,再点击视图,即可出现如下界面,可清晰查看信息

  • 相关阅读:
    JS转义 escape()、encodeURI()、encodeURIComponent()区别详解
    PHP解决搜索时在URL地址栏输入中文字符搜索结果出现乱码
    CMSPRESS-PHP无限级分类2
    CMSPRESS-PHP无限级分类
    HTML5-CSS3-JavaScript(3)
    HTML5-CSS3-JavaScript(2)
    HTML5-CSS3-JavaScript(1)
    CSS3-Hover 效果 展示
    JAVA Socket地址绑定
    JAVA Socket无参构造方法的使用
  • 原文地址:https://www.cnblogs.com/hong-fithing/p/7610606.html
Copyright © 2011-2022 走看看