• Part1-HttpClient快速入门案例


    前言

      最近这段时间在学习爬虫方面的知识,接触了几个优秀的爬虫框架,也爬取了一些自己喜欢网站的信息。通过官网学习HttpClient的过程中,希望通过写此博客来巩固自己的学习,也为有需要的人提供学习帮助。系列文章内容主要为HttpClient官方文档的翻译以及个人理解。

    Part1-HttpClient快速入门案例:本节官网文档  

    下载安装

    1. 不使用Maven的情况:jar包下载地址
    2. 使用Maven的情况:在pom.xml中添加以下依赖
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.4</version>
            </dependency>

    快速入门案例

    /**
     * 
     * TODO 使用HttpClient原生API演示HTTP GET和POST请求的执行。
     * 
     * @author 寇爽
     * @date 2017年12月17日
     * @version 1.8
     */
    public class QuickStart {
    
        public static void main(String[] args) throws Exception {
            // 创建带有默认配置的CloseableHttpClient实例。
            CloseableHttpClient httpclient = HttpClients.createDefault();
            try {
                // 创建一个HttpGet对象实例(如果是post请求则创建HttpPost对象实例)
                HttpGet httpGet = new HttpGet("http://httpbin.org/get");
                // 使用默认上下文执行HTTP请求。
                CloseableHttpResponse response1 = httpclient.execute(httpGet);
                // 底层的HTTP连接仍然由响应对象持有
                // 为了确保对系统资源的正确处理,用户必须调用CloseableHttpResponse#close()。
                // 注意,如果响应内容未被完全使用,则底层连接不能被安全重用,并将被连接管理器关闭和丢弃。
                try {
                    // 输出该响应的状态
                    System.out.println(response1.getStatusLine());
                    // 获得该响应的消息实体,如果有的话。实体是通过调用setEntity(HttpEntity entity)来提供的。
                    HttpEntity entity1 = response1.getEntity();
                    // 对响应主体做一些有用的事情并确保它被完全消耗掉
                    // EntityUtils工具类提供了很多静态的方法用来处理HttpEntity对象实例
                    EntityUtils.consume(entity1);
                    //释放资源
                } finally {
                    response1.close();
                }
                // 创建一个HttpPost对象实例,对应Post请求
                HttpPost httpPost = new HttpPost("http://httpbin.org/post");
                //创建ArrayList列表
                //NameValuePair接口定义了用作 HTTP 消息元素的名称/值对参数。
                List<NameValuePair> nvps = new ArrayList<NameValuePair>();
                //BasicNameValuePair类为NameValuePair接口的基本实现类
                //这里调用了BasicNameValuePair类的构造方法
                nvps.add(new BasicNameValuePair("username", "vip"));
                nvps.add(new BasicNameValuePair("password", "secret"));
                //调用setEntity方法将实体与此请求关联。
                //UrlEncodedFormEntity(nvps):通过参数列表创建具有默认编码方式的UrlEncodedFormEntity对象实例
                httpPost.setEntity(new UrlEncodedFormEntity(nvps));
                //执行http请求
                CloseableHttpResponse response2 = httpclient.execute(httpPost);
    
                try {
                    System.out.println(response2.getStatusLine());
                    HttpEntity entity2 = response2.getEntity();
                    // 对响应主体做一些有用的事情并确保它被完全消耗掉
                    EntityUtils.consume(entity2);
                    //释放资源
                } finally {
                    response2.close();
                }
            } finally {
                httpclient.close();
            }
        }
    }

    改版(同样的请求可以使用更简单、但不那么灵活的API来执行。)

    //流畅的 API 使用户不必手动处理系统资源的分配, 
    //但是在某些情况下, 需要在内存中缓冲响应内容
    Request.Get("http://targethost/homepage")
        .execute().returnContent();
    Request.Post("http://targethost/login")
        .bodyForm(Form.form().add("username",  "vip").add("password",  "secret").build())
        .execute().returnContent();

    HttpClient例子

    官网提供的例子:展示了一些更复杂的行为。

    HttpClient教程

    官网提供的教程:给出了 HttpClient API 的详细的介绍, 这是按照 (有时不是很直观) HTTP 规范/标准编写的。副本也随发行版一起发送,另外还提供了 PDF 版本

    HttpClient Primer

    官网提供的解释HttpClient使用范围的文档:本文的目的是为那些突然需要或想要实现一个自动化应用程序的人,这些应用程序通常是用浏览器完成的,但是却缺少后台来理解他们实际需要做什么。它提供了实现与web站点交互所需的步骤的指导,该程序设计用于与浏览器一起使用。
    转载请注明转载地址。。。

  • 相关阅读:
    【洛谷4941】War2 状压Dp
    洛谷4623 [COCI2012-2013#6] BUREK
    洛谷1099 [NOIP2007] 树网的核
    【Jim】I am back (ง •_•)ง
    发个ZKW线段树板子测试一下代码高亮
    洛谷2764 最小路径覆盖问题
    洛谷1972 [SDOI2009]HH的项链
    bzoj1059 [ZJOI2007]矩阵游戏
    知识点整理--组合数学
    最大矩形问题总结
  • 原文地址:https://www.cnblogs.com/snailclimb/p/9086458.html
Copyright © 2020-2023  润新知