zoukankan      html  css  js  c++  java
  • Http——HttpClient使用

    HttpClient简介

    为了更好地处理向Web站点请求,包括处理SessionCookie等细节问题,Apache开源组织提供了一个HttpClient项目,

    看它的名称就知道,它是一个简单的HTTP客户端(并不是浏览器),可以用于发送HTTP请求,接收HTTP响应。

    但不会缓存服务器的响应,不能执行HTML页面中嵌入的Javascript代码;也不会对页面内容进行任何解析、处理。

    HttpClient使用

    使用HttpClient发送请求、接收响应很简单,只要如下几步即可:

    1. 创建HttpClient对象。
    2. 如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
    3. 如果需要发送请求参数,可调用HttpGetHttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
    4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse
    5. 调用HttpResponsegetAllHeaders()getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponsegetEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
    • 使用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();
                }
            }
        }
    }
    • 使用POST方式访问HTTP
    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();
                }
            }
        }
    }
  • 相关阅读:
    3 Steps to Perform SSH Login Without Password Using sshkeygen & sshcopyid
    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
    Ubuntu 取消 Apache及MySQL等自启动
    linux screen 命令详解
    Ubuntu把家目录文件夹名称改为英文
    Ubuntu12.10 下 PPA安装搜狗输入法 for Linux
    VirtualBox虚拟机后台运行
    Ubuntu下安装jdk
    [整理篇]linux加入windows域之完美方案
    pxe 远程安装linux系统
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/14724023.html
Copyright © 2011-2022 走看看