1:httpClient到底是什么呢?
HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。
2:为什么要用这个工具呢?
虽然在JDK的java net包中已经提供了访问HTTP协议的基本功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。
3:HttpClient 提供的主要功能
(1)实现了所有HTTP的方法(GET,POST,PUT,HEAD等)
(2)支持自动转向
(3)支持HTTPS协议
(4)支持代理服务器等
4:使用步骤
使用HttpClient发送请求、接受响应数据一般需要以下几步
4.1 创建HttpClient对象
4.2 创建请求方法的实例,并指定URL请求地址,如果是GET请求,这创建HttpGet对象,若是POST请求,则创建HttpPost对象
4.3 如果需要发送请求参数,HttpGet请求地址后面可直接加参数,对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4.4 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
4.5 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
4.6 释放连接。无论执行方法是否成功,都必须释放连接
5:代码演示
5.1 GET方法
package hello.HttpClientDemo;
import java.io.IOException;
import org.apache.http.Header;
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.HttpClients;
import org.apache.http.util.EntityUtils;
public class GetDemo {
public static void main(String[] args) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://www.baidu.com");
CloseableHttpResponse response;
try {
response = httpClient.execute(httpGet);
System.out.println("消息头");
if (response != null) {
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
System.out.println(header.toString());
}
System.out.println("消息内容");
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity,"UTF-8"));
System.out.println(entity.getContentLength());
}
} catch (ClientProtocolException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
5.2 POST方法
package hello.HttpClientDemo;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
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.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class PostDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(
"http://127.0.0.1:8000/ultron.app.common/userLogin");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("userName", "ultron"));
nvps.add(new BasicNameValuePair("userPasswd", "ultron"));
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
try {
// 客户端执行post请求 返回响应实体
CloseableHttpResponse response = httpClient.execute(httpPost);
// 服务器响应状态行
System.out.println(response.getStatusLine());
Header[] heads = response.getAllHeaders();
// 打印所有响应头
System.out.println("响应头");
for (Header h : heads) {
System.out.println(h.getName() + ":" + h.getValue());
}
// 获取响应消息实体
HttpEntity entity = response.getEntity();
System.out.println("------------------------------------");
if (entity != null) {
// 响应内容
System.out.println(EntityUtils.toString(entity));
System.out.println("----------------------------------------");
// 响应内容长度
System.out.println("响应内容长度:" + entity.getContentLength());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}