当前环境:httpclient 4.5.6
当前例子来源于:apache-httpclient的入门demo
当前学习资源来自apache中的httpclient(一个用于简化访问http服务器的http客户端
),这里盗一波图:
<dependency>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpclientartifactId>
<version>4.5.6version>
dependency>
public static void main(String[] args) throws IOException {
// 创建一个默认可以关闭的HTTP客户端,用于访问HTTPServer端
CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建一个get请求用于访问当前的百度地址
HttpGet httpGet = new HttpGet("http://www.baidu.com");
//这里可以使用HttpPost httpPost=new HttpPost("http://www.baidu.com");
//创建post请求
CloseableHttpResponse response = null;
try {
// 通过当前的客户端执行当前的get请求并获得响应结果
response = httpclient.execute(httpGet);
// 输出响应状态码
System.out.println("输出当前的响应状态行:" + response.getStatusLine());
// 获取响应的实体
HttpEntity entity = response.getEntity();
if(entity==null) {
System.out.println("没有响应数据");
return;
}
// do something useful with the response body
// and ensure it is fully consumed
// EntityUtils.consume(entity);,这里不应该在这里关闭如果关闭后将不能使用这个流了!
byte[] byteArray = EntityUtils.toByteArray(entity);// 使用工具来拷贝流的数据为二进制数组
EntityUtils.consume(entity);// 最后在这里关闭
String content = new String(byteArray, "UTF-8");// 使用String将当前的二维数组变为字符
System.out.println(content);
} finally {
response.close();
}
Scanner scanner = new Scanner(System.in);
scanner.next();
}
结果:
结果,使用httpclient创建一个访问百度的http客户端就是这个么简单!
1.通过当前的demo发现,创建一个HttpClient需要通过当前的HttpClients这个工具创建!
2.通过当前的HttpClient的execute发送请求的方法,现在查看这个方法
@Override
public CloseableHttpResponse execute(
final HttpUriRequest request) throws IOException, ClientProtocolException {
return execute(request, (HttpContext) null);
}
3.发现当前执行的是一个HttpUriRequest类型的数据,我们可以查看当前的结构树
4.在这里我们发现了常用的http请求方式:GET、POST、DELETE、PUT
5.通过当前的execute执行请求后会得到一个响应对象CloseableHttpResponse,这个对象一般对应了响应体和响应状态码
6.通过当前的CloseableHttpResponse可以获取响应的内容:getContent方法,这个方法返回一个InputStream
,所以在这里不能调用
EntityUtils.consume(entity)EntityUtils.consume(entity);用于关闭这个流
)
7.要保存这个流我们可以使用二进制数组保存
,所以就有了StreamUtils这个工具类
8.最后一定要关闭当前的CloseableHttpResponse
使用post方式创建这个HttpUriRequest,就是execute需要的参数
@Test
public void postRequest() throws UnsupportedEncodingException {
HttpUriRequest build = RequestBuilder.post("http://www.baidu.com").build();
}
使用get方式创建这个HttpUriRequest
@Test
public void getRequest() throws UnsupportedEncodingException {
HttpUriRequest build = RequestBuilder.get("http://www.baidu.com").build();
}
访问的结果一致!
get方式添加参数:方式一
public void addParameterByGetMethod1() {
HttpUriRequest build = RequestBuilder.get("http://www.baidu.com").addParameter("wd","你好").build();
}
get方式添加参数:方式二
public void addParameterByGetMethod2() {
URI uri= new URIBuilder("http://www.baidu.com")
.addParameter("wd","你好")
.build();
HttpGet httpGet=new HttpGet("http://www.baidu.com");
}
post方式添加参数:方式一
HttpPost httpPost = new HttpPost("http://www.baidu.com");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("wd", "你好"));
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
post方式添加参数:方式二
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("wd", "vip"));
HttpUriRequest build = RequestBuilder.post("http://www.baidu.com").setEntity(new UrlEncodedFormEntity(params)).build();
1.所以当前的get方式可以通过addParamater添加参数或者直接在当前的uri中添加参数即可(URIBuilder)
2.post请求只能在当前的setEntity中添加参数
1.使用当前的httpClient访问服务器确实很简单,只需要通过当前的HttpClients创建一个客户端
,然后选择发送的uri和参数
,最后就可以接收响应结果
!
2.当前的参数添加规则对于不同的方法
需要使用不同的添加参数的方式
以上纯属个人简介,如有问题请联系本人!