zoukankan      html  css  js  c++  java
  • httpclient(二)

    静下心看了一遍httpclient的api,我这英语水平看文档太费劲了,还好又有了很多新的收获,这里在记录下以免时间久了忘记了

    官方API给出了httpclient的关键步骤,还是上节总结的  1、创建模拟浏览器2、创建请求3、得到相应结果

      通过HttpClients的静态方法createDefault创建返回一个CloseableHttpClient对象,也可以通过HttpClientBuilder类的builder方法创建 这种方式可以设置一些默认headers等信息

      CloseableHttpClient httpclient = HttpClients.createDefault();  

      HttpGet httpget = new HttpGet("http://localhost/");

      CloseableHttpResponse response = httpclient.execute(httpget);

    1、请求

    HttpPostt、HttpGet类有三种构造方法

    HttpGet get = new HttpGet(); //下面两种比较常用
    HttpGet get = new HttpGet(String url);  //传递一个url 上一节说过,相对比较容易理解
    HttpGet get = new HttpGet( URI uri);//见下面的代码示例

    httpclint提供了URIBuilder类通过.build()方法用来创建URI对象

    URI url=new URIBuilder().setScheme("http")
                    .setHost("127.0.0.1")
                    .setPort(8989)
                    .setPath("/login")
                    .setParameter("username", "111111")//添加参数
                    .setParameter("password", "111111")
              .setCustomQuery("username=111111&password=111111").build(); 
    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    HttpPost post = new HttpPost(url);

    2、响应

    System.out.println(response.getProtocolVersion());  //HTTP/1.1
    System.out.println(response.getStatusLine().getStatusCode()); //200
    System.out.println(response.getStatusLine().getReasonPhrase()); //ok
    System.out.println(response.getStatusLine().toString());//HTTP/1.1 200 OK

     3、头部信息

    HttpPost和HttpResponse等都提供了删除添加headers的方法

    get.addHeader("1","2");
    post.addHeader("1","2");

    4、实体Entity 

    这里调用了StringEntity的构造方法把字符串转变成一个实体的对象,可以使用getContentType和getContentLength获取内容的类型和长度 通过EntityUtils.toString(entity)将内容转化成字符串---一般用于response结果的展示

    StringEntity entity = new StringEntity("12345","utf-8");
    entity.setContentType("text/json");             
    entity.setContentEncoding("UTF-8");             
    post.addHeader("Content-type", "application/json;charset=UTF-8");
    post.setEntity(entity); //通过post对象的setEntity方法添加到post对象中

    5、资源释放

      response.close()

      httpclient.close()

    6、返回结果中实体内容的处理----Consuming entity content不知道翻译成啥

    HttpEntity httpEntity = response.getEntity(); 
    String result = EntityUtils.toString(httpEntity, "utf-8");

    这里官方的文档是不建议使用EntityUtils的,不过我用到现在还没出现过问题,后续观察

    7、添加内容到请求实体

     7.1文件

    File file = new File("somefile.txt");
    FileEntity entity = new FileEntity(file, ContentType.create("text/plain", "UTF-8"));
    post.setEntity(entity);

      7.2form表单

    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(new BasicNameValuePair("1","1"));
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
    post.setEntity(entity);

    7.3字符串或者json上面第四点已经描述过,这里直接贴api例子

    StringEntity entity = new StringEntity("important message",ContentType.create("plain/text", Consts.UTF_8));
    entity.setChunked(true);
    HttpPost httppost = new HttpPost("http://localhost/acrtion.do");
    httppost.setEntity(entity);

     8、设置代理

    设置代理涉及到三个类RequestConfig.Builder(RequestConfig的嵌套类)、HttpPost、HttpHost;RequestConfig.Builder用来配置一些外部的网络环境。使用时先用RequestConfig类的静态方法custom()获取equestConfig.Builder的配置器。

    这里面常用的是配置代理proxy、连接超时时间等

    HttpHost proxy = new HttpHost("127.0.0.1", 8888);
    RequestConfig requestConfig =  RequestConfig.custom()
                              .setProxy(proxy)
                              .setConnectTimeout(10000)
                              .setSocketTimeout(10000)                     .setConnectionRequestTimeout(3000).build();

    然后通过HttpPost的setConfig方法加到请求中

    post.setConfig(requestConfig);
  • 相关阅读:
    数据库chapter 4 数据库安全性
    数据库 chapter 2 关系数据库
    数据库 chapter 1 概论
    操作系统 chapter 11 I/O系统
    操作系统 chapter 12 死锁
    操作系统 chapter 7 8 存储模型
    聊一聊移动调试那些事儿
    获取当前日期和农历的js代码
    使用 CSS 媒体查询创建响应式网站
    大前端工具集
  • 原文地址:https://www.cnblogs.com/ysmdbk/p/11138041.html
Copyright © 2011-2022 走看看