`
什么_况
  • 浏览: 53826 次
文章分类
社区版块
存档分类
最新评论

通用httpclient生成方式

阅读更多

 在做爬虫的时候,如何生成一个靠谱可用的httpclient对象是非常关键的。在踩了无数的坑之后,总结出一个较为完善的httpclient生成方式。

可以解决以下问题:

1、设置代理问题

2、设置默认的cookiestore对象,用来保存请求中的cookie。以便进行深层次访问。

3、在请求失败的重试策略问题

4、默认useragent的问题

5、https及自签名证书的验证问题

/**
     * 新建一个通用httpclientbuider
     * 使用代理时,必须一起传入host对象。
     * 不传入host对象的时候,代理不会生效
     */
    public static HttpClientBuilder getInstanceClientBuilder(boolean isNeedProxy, CookieStore store, HttpHost host, HttpRequestRetryHandler handler, String userAgent) {
        org.apache.http.ssl.SSLContextBuilder context_b = SSLContextBuilder.create();
        SSLContext ssl_context = null;
        try {
            context_b.loadTrustMaterial(null, (x509Certificates, s) -> true);
            //信任所有证书,解决https证书问题
            ssl_context = context_b.build();
        } catch (Exception e) {
            e.printStackTrace();
        }
        ConnectionSocketFactory sslSocketFactory = null;
        Registry<ConnectionSocketFactory> registry = null;
        if (ssl_context != null) {
            sslSocketFactory = new SSLConnectionSocketFactory(ssl_context, new String[]{"TLSv1", "TLSv1.1", "TLSv1.2"}, null, (s, sslSession) -> true);
            //应用多种tls协议,解决偶尔握手中断问题
            registry = RegistryBuilder.<ConnectionSocketFactory>create().register("https", sslSocketFactory).register("http", new PlainConnectionSocketFactory()).build();
        }
        PoolingHttpClientConnectionManager manager = null;
        if (registry != null) {
            manager = new PoolingHttpClientConnectionManager(registry);
        } else {
            manager = new PoolingHttpClientConnectionManager();
        }
        manager.setMaxTotal(150);
        manager.setDefaultMaxPerRoute(200);
        HttpClientBuilder builder = HttpClients.custom().setRetryHandler(handler)
                .setConnectionTimeToLive(6000, TimeUnit.SECONDS)
                .setUserAgent(userAgent);
        if (store != null) {
            builder.setDefaultCookieStore(store);
        }
        if (isNeedProxy && host != null) {
//            HttpHost proxy = new HttpHost("127.0.0.1", 1080);// 代理ip
            DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(host);
            builder = builder.setRoutePlanner(routePlanner);
        }
        builder.setConnectionManager(manager);//httpclient连接池
        builder.setRedirectStrategy(new AllowAllRedirectStrategy());//默认重定向所有302和307,否则httpclient只自动处理get请求导致的302和307
        return builder;
    }

 

0
0
分享到:
评论

相关推荐

    commons-httpclient-3.1.jar和commons-codec-1.3.jar

    4. **Phonetic编码**:如Metaphone和Soundex,用于生成单词的音译表示,便于文本比较。 5. **BZip2解压**:虽然HttpClient主要处理HTTP通信,但Codec库也包含了一些压缩算法,如BZip2,可用于数据压缩和解压缩。 在...

    轻量级C++实现的httpserver和httpclient

    2. 支持CGI(通用网关接口):允许执行服务器端脚本,如Perl或PHP,以动态生成内容。 3. 自定义处理函数:开发者可以注册回调函数,对特定的HTTP请求进行自定义处理。 4. 支持HTTPS:通过SSL/TLS加密,提供安全的...

    HTTPCLIENT 中文指南

    ### HTTPCLIENT 中文指南知识点详解 #### 一、HttpCore概览 **1.1 HTTP报文** **1.1.1 结构** HTTP报文主要由头部和可选的内容体构成。对于HTTP请求报文而言,头部由请求行和一系列头部字段组成;而HTTP响应报文...

    WebService通用調用方式及源碼

    标题“WebService通用調用方式及源碼”指的是这个压缩包包含了一种通用的调用WebService的方法以及相关的源代码。这意味着,无论你面对的是哪种类型的WebService,都可以使用这些工具类来进行调用,而不需要针对每个...

    httpclient抓取网页数据和所需的10个jar包

    8. `commons-collections.jar` - Apache的通用集合框架,可能在HttpClient内部使用。 9. `json-lib.jar` - JSON处理库,如果需要解析或生成JSON格式的数据,可能用到。 10. `jackson-core-asl.jar` / `jackson-...

    WebService调用的几种方式

    本文将深入探讨在Java环境中调用WebService的五种主要方式:Axis、CXF、HttpClient、MyEclipse反向生成以及XFire。 1. Axis:Apache Axis是最早且广泛使用的SOAP库,用于创建和消费Web服务。使用Axis调用WebService...

    struts spring hibernate jquery json poi httpclient 集成包

    这个集成包包含的`tools.jar`可能包含了一些通用的Java开发工具类,`javassist-3.7.ga.jar`是一个动态类文件处理库,可能用于运行时修改类结构,`commons-collections-3.1.2.1.jar`和`commons-collections.jar`提供...

    log4j,httpclient,jsonp,等jar包

    `commons-logging`是Apache的一个通用日志接口,可以适配多种日志实现,如log4j;`fastjson`是阿里巴巴提供的一个快速、强大且轻量级的JSON库,用于JSON解析和生成。 再来看压缩包子文件的文件名称列表,如`xalan-...

    Java实现-生成带参的小程序二维码

    - `access_token`:获取此接口需要先调用微信的“获取access_token”接口,这是微信API的通用凭证。 2. **调用API**: 使用Java的HTTP客户端库,如Apache HttpClient或OkHttp,向微信API发送POST请求。请求URL...

    Web Service通用客户端和测试工具

    - **HttpClient**:Java内置的HttpURLConnection或Apache HttpClient库可以用于编写自定义的Web服务测试脚本。 3. **WSDL和SOAP**:WSDL文件描述了Web服务的接口,包括服务的位置、使用的消息格式和操作。SOAP则是...

    BasicAuth的Java服务端实现

    **Java实现** 在Java中,我们可以利用`java.net.HttpURLConnection`或`org.apache.http.client.HttpClient`库来发送带有认证信息的HTTP请求。而在服务端,可以使用Servlet或者Spring MVC等框架来处理这些认证请求。 ...

    通用自动更新模块所引用的辅助模块

    在C#中,可以使用各种技术来实现这一功能,如 WebClient 或 HttpClient 类进行网络通信,ZipArchive 类处理更新包的解压缩,以及Assembly类加载新版本的程序集。 在提供的文件列表中,我们可以看到几个关键的组件:...

    C#.NET动态调用webservice的三种方式.pdf

    总结来说,动态调用WebService在特定场景下非常有用,比如当Web服务的地址或接口在运行时才能确定,或者需要跨多个不同类型的Web服务进行通用调用时。理解并掌握这些技术可以帮助开发者在不牺牲灵活性的同时,实现与...

    Java代码实现:CSDN博客认证头x-ca-nonce与x-ca-signature的自动生成.zip

    在IT行业中,安全是至关重要的一个方面,尤其是在网络通信中。CSDN博客作为一个知名的开发者社区,为了确保用户数据的安全,采用了特定的...同时,这也是一种通用的安全实践,适用于许多需要API调用和数据安全的场景。

    java8源码-my-api:各种技术api尝试操作

    这里存放通用api操作,其中攘括了通用Util,如二位码生成、中文转拼音、spring-bean方式格式化输出;除了Util外,tfidf为 中文分词 个人实现,可以说仿照Lucense 思想实现,可能在性能上有所欠缺;dbAccess 是自己 ...

    VB.NET实现腾讯AI通用文字识别Ocr&TTS;

    【VB.NET实现腾讯AI通用文字识别Ocr&TTS】是一个基于Visual Basic .NET的项目,主要功能是利用腾讯AI的API进行文字识别(OCR)和文本到语音转换(TTS)。这个项目对于开发者来说,是一个很好的实践案例,可以帮助...

    C#通用类库调用.zip

    7. **条形码生成和识别**:条形码处理通常需要第三方库,如BarcodeWriter库或ZXing.NET,它们能生成和读取多种类型的条形码和二维码。如果类库包含了这些,将使得在C#项目中集成条形码功能变得简单。 8. **Excel...

    C#通用在线更新源代码

    C#提供了System.Xml和System.Text.Json命名空间,用于解析和生成这些数据结构。 4. **版本控制**: 在线更新需要比较本地应用版本与服务器上的最新版本,以便确定是否需要更新。C#中可以使用Version类来处理版本...

    .NET(C#).NET(C#)通用类库源码

    8. **数学和随机数**:Math类提供了各种数学函数,Random类用于生成随机数。 9. **序列化与反序列化**:DataContractSerializer和XmlSerializer用于将对象转换为XML或二进制格式,以便于存储和传输。 10. **反射**...

    http接口通用调试工具,支持get、post、put、patch、delete方法

    2. **JSON数据处理**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Content-Type: application/json表明工具在发送和接收数据时采用JSON格式,这...

Global site tag (gtag.js) - Google Analytics