HttpClient使用详解

来源:互联网 发布:itunes无法连接到网络 编辑:程序博客网 时间:2024/06/08 09:16

1. 什么是httpclient

        HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
       下载地址:http://hc.apache.org/

2. 功能介绍

       以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。

         (1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)

         (2)支持自动转向

         (3)支持 HTTPS 协议

         (4)支持代理服务器等

3. 导入依赖

       

4.1. 执行GET请求

public class DoGET {    public static void main(String[] args) throws Exception {        // 创建Httpclient对象        CloseableHttpClient httpclient = HttpClients.createDefault();        // 创建http GET请求        HttpGet httpGet = new HttpGet("http://www.baidu.com/");        CloseableHttpResponse response = null;        try {            // 执行请求            response = httpclient.execute(httpGet);            // 判断返回状态是否为200            if (response.getStatusLine().getStatusCode() == 200) {                String content = EntityUtils.toString(response.getEntity(), "UTF-8");                System.out.println("内容长度:" + content.length());//                FileUtils.writeStringToFile(new File("C:\\baidu.html"), content);            }        } finally {            if (response != null) {                response.close();            }            httpclient.close();        }    }}

4.2. 执行带参数GET请求

public class DoGETParam {    public static void main(String[] args) throws Exception {        // 创建Httpclient对象        CloseableHttpClient httpclient = HttpClients.createDefault();        // 定义请求的参数        URI uri = new URIBuilder("http://www.baidu.com/s").setParameter("wd", "java").build();        System.out.println(uri);        // 创建http GET请求        HttpGet httpGet = new HttpGet(uri);        CloseableHttpResponse response = null;        try {            // 执行请求            response = httpclient.execute(httpGet);            // 判断返回状态是否为200            if (response.getStatusLine().getStatusCode() == 200) {                String content = EntityUtils.toString(response.getEntity(), "UTF-8");                System.out.println(content);            }        } finally {            if (response != null) {                response.close();            }            httpclient.close();        }    }}

5.1. 执行post请求

public class DoPOST {    public static void main(String[] args) throws Exception {        // 创建Httpclient对象        CloseableHttpClient httpclient = HttpClients.createDefault();        // 创建http POST请求        HttpPost httpPost = new HttpPost("http://www.oschina.net/");        CloseableHttpResponse response = null;        try {            // 执行请求            response = httpclient.execute(httpPost);            // 判断返回状态是否为200            if (response.getStatusLine().getStatusCode() == 200) {                String content = EntityUtils.toString(response.getEntity(), "UTF-8");                System.out.println(content);            }        } finally {            if (response != null) {                response.close();            }            httpclient.close();        }    }}

5.2. 执行带参数post请求

public class DoPOSTParam {    public static void main(String[] args) throws Exception {        // 创建Httpclient对象        CloseableHttpClient httpclient = HttpClients.createDefault();        // 创建http POST请求        HttpPost httpPost = new HttpPost("http://www.oschina.net/search");        // 设置2个post参数,一个是scope、一个是q        List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);        parameters.add(new BasicNameValuePair("scope", "project"));        parameters.add(new BasicNameValuePair("q", "java"));        // 构造一个form表单式的实体        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);        // 将请求实体设置到httpPost对象中        httpPost.setEntity(formEntity);        CloseableHttpResponse response = null;        try {            // 执行请求            response = httpclient.execute(httpPost);            // 判断返回状态是否为200            if (response.getStatusLine().getStatusCode() == 200) {                String content = EntityUtils.toString(response.getEntity(), "UTF-8");                System.out.println(content);            }        } finally {            if (response != null) {                response.close();            }            httpclient.close();        }    }}

6. 一个封装HttpClient通用工具类

public class HttpClientUtil {public static String doGet(String url, Map<String, String> param) {// 创建Httpclient对象CloseableHttpClient httpclient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;try {// 创建uriURIBuilder builder = new URIBuilder(url);if (param != null) {for (String key : param.keySet()) {builder.addParameter(key, param.get(key));}}URI uri = builder.build();// 创建http GET请求HttpGet httpGet = new HttpGet(uri);// 执行请求response = httpclient.execute(httpGet);// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {resultString = EntityUtils.toString(response.getEntity(), "UTF-8");}} catch (Exception e) {e.printStackTrace();} finally {try {if (response != null) {response.close();}httpclient.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doGet(String url) {return doGet(url, null);}public static String doPost(String url, Map<String, String> param) {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);// 创建参数列表if (param != null) {List<NameValuePair> paramList = new ArrayList<>();for (String key : param.keySet()) {paramList.add(new BasicNameValuePair(key, param.get(key)));}// 模拟表单UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);httpPost.setEntity(entity);}// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "utf-8");} catch (Exception e) {e.printStackTrace();} finally {try {response.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return resultString;}public static String doPost(String url) {return doPost(url, null);}}

原创粉丝点击