ApacheHttpClient:初次使用的简单Demo(用来访问百度)

当前环境:httpclient 4.5.6

1.简介

当前例子来源于:apache-httpclient的入门demo

当前学习资源来自apache中的httpclient(一个用于简化访问http服务器的http客户端),这里盗一波图:
ApacheHttpClient:初次使用的简单Demo(用来访问百度)_第1张图片

2.pom依赖

	
<dependency>
	<groupId>org.apache.httpcomponentsgroupId>
	<artifactId>httpclientartifactId>
	<version>4.5.6version>
dependency>

3.使用httpclient访问百度

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();
	}

结果:
ApacheHttpClient:初次使用的简单Demo(用来访问百度)_第2张图片
结果,使用httpclient创建一个访问百度的http客户端就是这个么简单!

4.分析

1.通过当前的demo发现,创建一个HttpClient需要通过当前的HttpClients这个工具创建!

2.通过当前的HttpClient的execute发送请求的方法,现在查看这个方法

 @Override
    public CloseableHttpResponse execute(
            final HttpUriRequest request) throws IOException, ClientProtocolException {
        return execute(request, (HttpContext) null);
    }

3.发现当前执行的是一个HttpUriRequest类型的数据,我们可以查看当前的结构树

ApacheHttpClient:初次使用的简单Demo(用来访问百度)_第3张图片
4.在这里我们发现了常用的http请求方式:GET、POST、DELETE、PUT

5.通过当前的execute执行请求后会得到一个响应对象CloseableHttpResponse,这个对象一般对应了响应体和响应状态码

6.通过当前的CloseableHttpResponse可以获取响应的内容:getContent方法,这个方法返回一个InputStream,所以在这里不能调用EntityUtils.consume(entity)EntityUtils.consume(entity);用于关闭这个流)

7.要保存这个流我们可以使用二进制数组保存,所以就有了StreamUtils这个工具类

8.最后一定要关闭当前的CloseableHttpResponse

5.使用其他方式创建HttpUriRequest访问百度

使用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();
	}

访问的结果一致!

6.向服务器传递所需要的参数

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中添加参数

7.总结

1.使用当前的httpClient访问服务器确实很简单,只需要通过当前的HttpClients创建一个客户端然后选择发送的uri和参数最后就可以接收响应结果

2.当前的参数添加规则对于不同的方法需要使用不同的添加参数的方式

以上纯属个人简介,如有问题请联系本人!

你可能感兴趣的:(Java工具)