为了更好地处理向Web站点请求,包括处理Session、Cookie等细节问题,Apache开源组织提供了一个HttpClient项目,
看它的名称就知道,它是一个简单的HTTP客户端(并不是浏览器),可以用于发送HTTP请求,接收HTTP响应。
但不会缓存服务器的响应,不能执行HTML页面中嵌入的Javascript代码;也不会对页面内容进行任何解析、处理。
使用HttpClient发送请求、接收响应很简单,只要如下几步即可:
使用GET方式访问HTTP
package com.qf.client; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; /** * GET请求示例*/ public class GetDemo { public static void main(String[] args) { // 1. 创建HttpClient对象 CloseableHttpClient httpClient = HttpClientBuilder.create().build(); // 2. 创建HttpGet对象 HttpGet httpGet = new HttpGet("http://localhost:8080/Servlet/do_login.do?username=test&password=123456"); CloseableHttpResponse response = null; try { // 3. 执行GET请求 response = httpClient.execute(httpGet); System.out.println(response.getStatusLine()); // 4. 获取响应实体 HttpEntity entity = response.getEntity(); // 5. 处理响应实体 if (entity != null) { System.out.println("长度:" + entity.getContentLength()); System.out.println("内容:" + EntityUtils.toString(entity)); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 6. 释放资源 try { response.close(); httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } }
package com.qf.client; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; /** * POST请求测试*/ public class PostDemo { public static void main(String[] args) { // 1. 创建HttpClient对象 CloseableHttpClient httpClient = HttpClientBuilder.create().build(); // 2. 创建HttpPost对象 HttpPost post = new HttpPost("http://localhost:8080/Servlet/do_login.do"); // 3. 设置POST请求传递参数 List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("username", "test")); params.add(new BasicNameValuePair("password", "12356")); try { UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params); post.setEntity(entity); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 4. 执行请求并处理响应 try { CloseableHttpResponse response = httpClient.execute(post); HttpEntity entity = response.getEntity(); if (entity != null){ System.out.println("响应内容:"); System.out.println(EntityUtils.toString(entity)); } response.close(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 释放资源 try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } }
原文:https://www.cnblogs.com/caoweixiong/p/14724023.html