HttpClient4 第一章 入门HttpClient

HttpClient4是HTTP客户端库,用于发送HTTP请求和接收响应。本文介绍了如何创建HttpClient实例,发送GET请求,以及如何设置和操作请求头,帮助读者快速入门HttpClient的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HttpClient顾名思义就是一个Http客户端。最常见的HTTP客户端就是浏览器,可是并不意味着HttpClient也是浏览器,他只是一个能够提供Http连接的客户端而已。

想要了解HttpClient是什么,就必须要了解HTTP请求。一个HTTP请求分为请求和响应,那么HttpClient要想实现HTTP请求连接,就必须要实现能够发送请求和响应。首先我们来看一个HTTP请求:

Request URL: https://www.youkuaiyun.com/
Request Method: GET
Status Code: 200 OK
Remote Address: 47.95.164.112:443
Referrer Policy: unsafe-url
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Sat, 11 Aug 2018 03:59:46 GMT
Keep-Alive: timeout=20
Server: openresty
Strict-Transport-Security: max-age= 31536000
Transfer-Encoding: chunked
Vary: Accept-Encoding
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie: uuid_tt_dd=10_20323630930-1531123659711-444931; __utma=17226283.291028385.1531126861.1531126861.1531126861.1; __utmz=17226283.1531126861.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=1788*1*PC_VC; smidV2=20180716211318757480c3c52e2675cd2ea0144523f27b003d5bdece4d90a50; dc_session_id=10_1532921500961.294926; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1533954154,1533956297,1533956307,1533959726; UserName=Tony_Key; UserInfo=dnvQh6JIgd%2Bur%2Bygxc0WjdZPJiv1Y%2Fdjj7U94flkxbp4y4bdbMbrlZIgoK1D%2Fy86eEghI9NBbSisRIVWeeW%2FoXeQp7kDTbVTsdHVwskiO6Q8UgFHIbJJcyAhYRACamOz; UserNick=%E9%98%BF%E8%9E%AD; UN=Tony_Key; AU=CD7; BT=1533959761563; UserToken=dnvQh6JIgd%2Bur%2Bygxc0WjdZPJiv1Y%2Fdjj7U94flkxbp4y4bdbMbrlZIgoK1D%2Fy86eEghI9NBbSisRIVWeeW%2FoXeQp7kDTbVTsdHVwskiO6Ss3Sdnz9eSJjdnf8LjJnkfjEJLVVoIuZOlvwXiha%2BeH4WCNsEYnO2FvvbhcJ4uhyQ%3D; TY_SESSION_ID=4fcf50fb-8a8e-42d4-af57-69409d2919d3; ADHOC_MEMBERSHIP_CLIENT_ID1.0=c4c9e127-0aa4-f651-ddeb-00f1d2bb24c1; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1533959774; dc_tos=pda2xr
Host: www.youkuaiyun.com
Referer: https://passport.youkuaiyun.com/account/login_mobile_verification_code
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

一个HTTP请求包含了请求URL,请求方式,请求头和响应状态响应码。我们通过功能来看HttpClient的实现。那么我们需要知道,如何来创建客户端,如何来创建HTTP请求,请求中包含请求头和请求体,那么如何来操作请求头,如何来操作请求体,如何发送请求,如何接收响应,如何获取响应的内容。其实HTTP请求也就这么多内容,那么只要我们搞懂上面的问题,也算是入门了。

首先需要创建一个能够发送HTTP请求的客户端

//一个HTTP客户端。并不是代表浏览器,只是代表一个能够发送HTTP请求的客户端
        HttpClient httpClient = new DefaultHttpClient();

DefaultHttpClinet就是HttpClient的默认实现,创建DefaultHttpClient我们完成了请求的第一步,实现了一个HTTP请求的客户端,现在,我们具有了能够发送HTTP请求的功能。第二步我们需要做的是发送HTTP请求。HTTP请求又包含很多中方式,比如:GET,HEAD,POST,PUT,DELETE, TRACE 和 OPTIONS,我们以GET请求为例,创建一个GET请求对象。

HttpGet httpGet = new HttpGet("http://www.baidu.com");

HttpGet就是HttpClient对HTTP请求的一个封装。我们不需要把它想象的有多么复杂,它不是一个深奥的东西,仅仅只是封装了一个GET请求方式的HTTP请求。那么我们很容易的就能想象出来它的具体功能是什么,具有哪些内容。依旧坚持我们的理念,根据需求来看实现。

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie: uuid_tt_dd=10_20323630930-1531123659711-444931; __utma=17226283.291028385.1531126861.1531126861.1531126861.1; __utmz=17226283.1531126861.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=1788*1*PC_VC; smidV2=20180716211318757480c3c52e2675cd2ea0144523f27b003d5bdece4d90a50; dc_session_id=10_1532921500961.294926; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1533954154,1533956297,1533956307,1533959726; UserName=Tony_Key; UserInfo=dnvQh6JIgd%2Bur%2Bygxc0WjdZPJiv1Y%2Fdjj7U94flkxbp4y4bdbMbrlZIgoK1D%2Fy86eEghI9NBbSisRIVWeeW%2FoXeQp7kDTbVTsdHVwskiO6Q8UgFHIbJJcyAhYRACamOz; UserNick=%E9%98%BF%E8%9E%AD; UN=Tony_Key; AU=CD7; BT=1533959761563; UserToken=dnvQh6JIgd%2Bur%2Bygxc0WjdZPJiv1Y%2Fdjj7U94flkxbp4y4bdbMbrlZIgoK1D%2Fy86eEghI9NBbSisRIVWeeW%2FoXeQp7kDTbVTsdHVwskiO6Ss3Sdnz9eSJjdnf8LjJnkfjEJLVVoIuZOlvwXiha%2BeH4WCNsEYnO2FvvbhcJ4uhyQ%3D; TY_SESSION_ID=4fcf50fb-8a8e-42d4-af57-69409d2919d3; ADHOC_MEMBERSHIP_CLIENT_ID1.0=c4c9e127-0aa4-f651-ddeb-00f1d2bb24c1; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1533959774; dc_tos=pda2xr
Host: www.youkuaiyun.com
Referer: https://passport.youkuaiyun.com/account/login_mobile_verification_code
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

我们需要创建一个GET的请求方式,那么我必须告诉HttpClient,请求地址是哪里,这是必须的。如果我想修改,删除,查询请求头的信息,那么该封装对象还应该给我提供对请求头进行操作的方法。首先我们来看一下如何来操作URL

 //方式1:直接指定URL创建HttpGet对象
        HttpGet httpGet = new HttpGet("http://www.baidu.com");
        //方式2:通过URI对象来设置
        List<NameValuePair> qparams = new ArrayList<>(); 
        qparams.add(new BasicNameValuePair("q", "httpclient")); 
        qparams.add(new BasicNameValuePair("btnG", "Google Search")); 
        qparams.add(new BasicNameValuePair("aq", "f")); 
        qparams.add(new BasicNameValuePair("oq", null));
        //可以看出来,BasicNameValuePair对象也是一个以Key-Value形式的对象。
        //该对象其实仅仅只是表示一行参数,我们访问资源的参数,Key为参数名,Value为参数值。
        //举一反三,那么其他任何请求方式,如果需要设置参数,那么就可以通过创建NameValuePair对象
        //即可满足设置带有名称的参数。
        URI uri = URIUtils.createURI("http", "www.baidu.com", -1, "/search", URLEncodedUtils.format(qparams, "UTF-8"), null);
        HttpGet httpget = new HttpGet(uri);
        System.out.println(httpget.getURI());

现在,我们已经掌握了如何来设置URL,下面我们开始要来学习如何来操作HTTP请求的Header

 //封装了一个GET请求的对象
        HttpGet httpGet = new HttpGet("http://www.baidu.com");
        //通过httpGet.getAllHeaders获取所有的请求头信息。HttpClient中,所有的头信息都是通过Header来实现的。
        Header [] headers = httpGet.getAllHeaders();
        for(Header header : headers){
            System.out.println(header.getName() + " : " + header.getValue());
        }
        //我们可以通过Key-value的方式来添加请求头
        httpGet.setHeader("Content-Type","text/html");
        //或者创建Header对象来添加请求头
        Header header = new BasicHeader("Content-Type","text/html");
        httpGet.setHeader(header);
        //通过removeHeaders来移除某个请求头,传入的参数为请求头的名称。
        httpGet.removeHeaders("Content");

现在,我们能够随意的控制请求头了。就是如此的简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值