HttpClient介绍

产生背景

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

功能

(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器等

使用场景

当一个项目中要想要直接通过访问Http协议来请求想要的资源时,可以使用httpClient,它将访问http协议的一系列的操作进行了封装,可以让我们很方便的进行访问。
目前最流行的属移动端了。通常app只用来进行显示,真正的业务逻辑单独放在一个服务端,单独作为一个服务供app进行调用。
这样只需要暴露服务层中controller的uri地址即可。

使用流程

使用 HttpClient 需要以下 6 个步骤:

1 创建 HttpClient 的实例
2.创建某种连接方法的实例,在这里是GetMethod。在 GetMethod 的构造函数中传入待连接的地址
3、调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
4、 读 response
5、释放连接。无论执行方法是否成功,都必须释放连接
6、 对得到后的内容进行处理

入门实例

GET

    @Test
    public void doGet() throws ClientProtocolException, IOException{
        //创建一个httpClient对象

        CloseableHttpClient httpClient=HttpClients.createDefault();
        //创建一个get对象
        HttpGet get=new HttpGet("http://www.baidu.com");
        //执行请求
        CloseableHttpResponse response=httpClient.execute(get);
        //获取响应的结果
        int statusCode=response.getStatusLine().getStatusCode();
        System.out.println("状态码为"+statusCode);
        HttpEntity entity=response.getEntity();

        //将entity中的内容读入到一个字符串中
        String string =EntityUtils.toString(entity,"utf-8");
        System.out.print(string);

        //关闭httpClient对象
        response.close();
        httpClient.close();
    }
    @Test
    public void duGetWithParam() throws URISyntaxException, ClientProtocolException, IOException{

        //创建httpClient对象
        CloseableHttpClient httpClient=HttpClients.createDefault();
        //通过uriBuilder来构建查询的连接和参数
        URIBuilder uriBuilder=new URIBuilder("http://www.sogou.com/web");
        uriBuilder.addParameter("query", "花千骨");

        //创建get对象
        HttpGet get=new HttpGet(uriBuilder.build());

        //执行请求
        CloseableHttpResponse response=httpClient.execute(get);
        //获取响应的结果
        int statusCode=response.getStatusLine().getStatusCode();
        System.out.println("状态码为"+statusCode);
        HttpEntity entity=response.getEntity();

        //将entity中的内容读入到一个字符串中
        String string =EntityUtils.toString(entity,"utf-8");
        System.out.print(string);

        //关闭httpClient对象
        response.close();
        httpClient.close();

    }

POST

@Test
    public void testPost() throws ClientProtocolException, IOException{
        //创建httpClient对象
        CloseableHttpClient httpClient=HttpClients.createDefault();
        //创建一个post对象
        HttpPost post=new HttpPost("http://localhost:8080/taotao-portal/httpClient/post.html");

        //执行请求
        CloseableHttpResponse response=httpClient.execute(post);
        //将entity中的内容读入到一个字符串中
        String string =EntityUtils.toString(response.getEntity(),"utf-8");
        System.out.print(string);
    }


    @Test
    public void testPostWithParam() throws ClientProtocolException, IOException{
        //创建httpClient对象
        CloseableHttpClient httpClient=HttpClients.createDefault();
        //创建一个post对象
        HttpPost post=new HttpPost("http://localhost:8080/taotao-portal/httpClientparam/post.html");

        List<NameValuePair> kvList=new ArrayList<NameValuePair>();
        kvList.add(new BasicNameValuePair("username","zhangsan"));
        kvList.add(new BasicNameValuePair("password", "123"));
        //包装成一个entity对象
        StringEntity entity=new UrlEncodedFormEntity(kvList);

        post.setEntity(entity);

        //执行请求
        CloseableHttpResponse response=httpClient.execute(post);
        //将entity中的内容读入到一个字符串中
        String string =EntityUtils.toString(response.getEntity(),"utf-8");
        System.out.print(string);
        response.close();
        httpClient.close();
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值