热门搜索 :
考研考公
您的当前位置:首页正文

httpclient 4.5.2 学习随笔(1)

来源:东饰资讯网

疑惑的地方

  1. HttpClient client = new HttpClient();
  2. CloseableHttpClient httpclient = HttpClients.createDefault();

The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the Apache HttpComponents project in its HttpClient and HttpCore modules, which offer better performance and more flexibility.

序言

  1. pom.xml文件中导入jar包
<dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpclient</artifactId>
   <version>4.5.2</version>
</dependency>
  1. demo 程序
import org.apache.http.Consts;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import 
import 

/**
 * describe
 *
 * @Author: soul
 * @Date: 2016/12/5
 * @since: JDK 1.8
 * @Version: v1.0
 */

public class Demo {
    public static void main(String[] args) throws IOException, URISyntaxException {
        example();
    }

    public static void example() throws URISyntaxException, IOException {
        //创建httpclient实例,采用默认的参数配置
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //通过URIBuilder类创建URI
        URI uri = new URIBuilder().setScheme("http")
                    
                    .build();

        HttpGet get = new HttpGet(uri) ;   //使用Get方法提交

        //请求的参数配置,分别设置连接池获取连接的超时时间,连接上服务器的时间,服务器返回数据的时间
        RequestConfig config = RequestConfig.custom()
                                           .setConnectionRequestTimeout(3000)
                                           .setConnectTimeout(3000)
                                           .setSocketTimeout(3000)
                                         .build();
        //配置信息添加到Get请求中
        get.setConfig(config);
        //通过httpclient的execute提交 请求 ,并用CloseableHttpResponse接受返回信息
        CloseableHttpResponse response = httpClient.execute(get);
        //服务器返回的状态
        int statusCode = response.getStatusLine().getStatusCode() ;
        //判断返回的状态码是否是200 ,200 代表服务器响应成功,并成功返回信息
        if(statusCode == HttpStatus.SC_OK){
            //EntityUtils 获取返回的信息。官方不建议使用使用此类来处理信息
            System.out.println("Demo.example -------->" + EntityUtils.toString(response.getEntity() , Consts.UTF_8));
        }else {
            System.out.println("Demo.example -------->" + "获取信息失败");
        }

    }
}
  • 创建httpclient实例
  • 创建httpmethod 方法实例 ,最常用的是HttpGet,HttpPost 类
  • httpclient 通过execute方法提交Get 或者Post 请求
  • 使用CloseableHttpResponse 来接受服务器返回的状态信息和实体信息
  • 关闭连接

HTTP 请求

HttpClient提供了URIBuilder工具类来简化创建。修改request URI .

URI uri = new URIBuilder().setScheme("http")
            
            .setPath("/search")
            .setParameter("q" ,"httpclient")
            .setParamter("btnG" ,"google+Serach")
            .build() ;
HttpGet get = new HttpGet(uri) ;
//除了使用URIBuilder工具类来创建连接,也可以直接采用字符串来定义uri
String url =  ;
HttpGet get = new HttpGet(url); 
//效果也是一样的

Http 响应

HTTP响应是服务器接收并解析请求信息后返回给客户端的信息,它的起始行包含了一个协议版本,一个状态和描述状态的短语。Http/1.1 , 200 ,Ok

HTTP 实体

HttpClient 分为三种实体:

  1. 流式实体:内容来源于一个流,或者在运行中产生。流式实体不可重复。
  2. 自我包含:内存中的内容,通过独立的链接/其他的实体获得的内容。自我包含实体可重复
  3. 包装实体:从另外一个实体中获得内容。

服务器返回的信息封装在了entity中,客户端通过调用response.getEntity 可以拿到该实体内容。通过HttpEntity#getContent()方法,可以将数据转换成一个InputStream流。或者提供一个输出流给HttpEntity#writeTo(Outputstream)方法,它将会返回写入给定流的所有内容。官方其实是不建议使用EntityUtils类的,除非响应的实体来自于信任的Http服务器,并且知道它的长度。

释放低级别的资源

为了确保正确的释放资源,你必须关掉与实体相关的内容流,还必须关掉响应流。

  • inputStrea.close()
  • response.close()

参考:


少年听雨歌楼上,红烛昏罗帐。  
壮年听雨客舟中,江阔云低,断雁叫西风。
感谢支持!
                                        ---起个名忒难

Top