本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流。

未经本人允许禁止转载

文章目录

  • RequestConfig类
  • 超时相关配置
  • 代理配置

RequestConfig类

在构建网络爬虫时,经常需要配置很多信息,例如RequestTimeout(连接池获取到连接的超时时间)、ConnectTimeout(建立连接的超时)、SocketTimeout(获取数据的超时时间)、代理、是否允许重定向等信息。
在HttpClient,实现这些配置需要使用到RequestConfig类的一个内部类Builder。如下为Builder的源码:

    public static class Builder {private boolean expectContinueEnabled;private HttpHost proxy;private InetAddress localAddress;private boolean staleConnectionCheckEnabled;private String cookieSpec;private boolean redirectsEnabled;private boolean relativeRedirectsAllowed;private boolean circularRedirectsAllowed;private int maxRedirects;private boolean authenticationEnabled;private Collection<String> targetPreferredAuthSchemes;private Collection<String> proxyPreferredAuthSchemes;private int connectionRequestTimeout;private int connectTimeout;private int socketTimeout;private boolean contentCompressionEnabled;Builder() {super();this.staleConnectionCheckEnabled = false;this.redirectsEnabled = true;this.maxRedirects = 50;this.relativeRedirectsAllowed = true;this.authenticationEnabled = true;this.connectionRequestTimeout = -1;this.connectTimeout = -1;this.socketTimeout = -1;this.contentCompressionEnabled = true;}public Builder setExpectContinueEnabled(final boolean expectContinueEnabled) {this.expectContinueEnabled = expectContinueEnabled;return this;}public Builder setProxy(final HttpHost proxy) {this.proxy = proxy;return this;}public Builder setLocalAddress(final InetAddress localAddress) {this.localAddress = localAddress;return this;}/*** @deprecated (4.4) Use {@link*   org.apache.http.impl.conn.PoolingHttpClientConnectionManager#setValidateAfterInactivity(int)}*/@Deprecatedpublic Builder setStaleConnectionCheckEnabled(final boolean staleConnectionCheckEnabled) {this.staleConnectionCheckEnabled = staleConnectionCheckEnabled;return this;}public Builder setCookieSpec(final String cookieSpec) {this.cookieSpec = cookieSpec;return this;}public Builder setRedirectsEnabled(final boolean redirectsEnabled) {this.redirectsEnabled = redirectsEnabled;return this;}public Builder setRelativeRedirectsAllowed(final boolean relativeRedirectsAllowed) {this.relativeRedirectsAllowed = relativeRedirectsAllowed;return this;}public Builder setCircularRedirectsAllowed(final boolean circularRedirectsAllowed) {this.circularRedirectsAllowed = circularRedirectsAllowed;return this;}public Builder setMaxRedirects(final int maxRedirects) {this.maxRedirects = maxRedirects;return this;}public Builder setAuthenticationEnabled(final boolean authenticationEnabled) {this.authenticationEnabled = authenticationEnabled;return this;}public Builder setTargetPreferredAuthSchemes(final Collection<String> targetPreferredAuthSchemes) {this.targetPreferredAuthSchemes = targetPreferredAuthSchemes;return this;}public Builder setProxyPreferredAuthSchemes(final Collection<String> proxyPreferredAuthSchemes) {this.proxyPreferredAuthSchemes = proxyPreferredAuthSchemes;return this;}public Builder setConnectionRequestTimeout(final int connectionRequestTimeout) {this.connectionRequestTimeout = connectionRequestTimeout;return this;}public Builder setConnectTimeout(final int connectTimeout) {this.connectTimeout = connectTimeout;return this;}public Builder setSocketTimeout(final int socketTimeout) {this.socketTimeout = socketTimeout;return this;}/*** @deprecated (4.5) Set {@link #setContentCompressionEnabled(boolean)} to {@code false} and* add the {@code Accept-Encoding} request header.*/@Deprecatedpublic Builder setDecompressionEnabled(final boolean decompressionEnabled) {this.contentCompressionEnabled = decompressionEnabled;return this;}public Builder setContentCompressionEnabled(final boolean contentCompressionEnabled) {this.contentCompressionEnabled = contentCompressionEnabled;return this;}public RequestConfig build() {return new RequestConfig(expectContinueEnabled,proxy,localAddress,staleConnectionCheckEnabled,cookieSpec,redirectsEnabled,relativeRedirectsAllowed,circularRedirectsAllowed,maxRedirects,authenticationEnabled,targetPreferredAuthSchemes,proxyPreferredAuthSchemes,connectionRequestTimeout,connectTimeout,socketTimeout,contentCompressionEnabled);}}

超时相关配置

HttpClient中可设置三个超时:RequestTimeout(连接池获取到连接的超时时间)、ConnectTimeout(建立连接的超时)、SocketTimeout(获取数据的超时时间)。使用RequestConfig进行配置的示例程序如下:

     //全部设置为10秒RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(10000).setConnectionRequestTimeout(10000).build();//配置httpClientHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build();

代理配置

     RequestConfig defaultRequestConfig = RequestConfig.custom().setProxy(new HttpHost("171.97.67.160", 3128, null)).build();   //添加代理HttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();  //配置httpClient

HttpClient4.5使用RequestConfig配置连接信息相关推荐

  1. mybatis使用拦截器显示sql,使用druid配置连接信息

    mybatis使用拦截器显示sql,使用druid配置连接信息 mybatis sql Druid 1.显示出sql内容: 新建2个类: MybatisInterceptor :拦截sql,并获得输出 ...

  2. Exchange企业实战技巧(16)发布SMTP、POP、IMAP连接信息设置

    在Exchange2010的OWA中,默认不提供SMTP.POP及IMAP相关信息.如何才能将SMTP.POP.IMAP的连接信息发布到OWA中,方便使用POP.IMAP方式收发邮件的用户,可以根据提 ...

  3. C#获得网络连接信息 IPGlobalProperties

    C#获得网络连接信息 IPGlobalProperties 原文:C#获得网络连接信息 IPGlobalProperties IPGlobalProperties 提供有关本地计算机的网络连接的信息. ...

  4. android wifi动画显示,android动态配置Wifi信息

    我们找到 android.net.wifi.WifiConfiguration.java 看看如何配置Wifi信息. /**************************************SS ...

  5. EnterpriseLibrary数据访问(3)加密连接信息

    使用配置工具加密数据库的连接信息 代码下载:http://dev.mjxy.cn/a-entlib-Encrypted-connection-information.aspx 1. App.Confi ...

  6. ssm注解配置连接mysql_基于注解和配置类的SSM(Spring+SpringMVC+Mybatis)项目详细配置...

    在上一篇文章中介绍了使用注解和xml配置文件对项目进行配置,在这篇文章中将xml配置文件中的配置信息都改成使用注解或者配置类的形式. 第一步.配置pom.xml 在一个ssm项目中,可能需要用到的依赖 ...

  7. pycharm配置连接服务器+python环境设置

    [pycharm配置连接服务器+python环境设置] 简要介绍 1. configuration 2. Deployment 3. SSH Configuration 配置 4. Mapping 5 ...

  8. kali liunx使用心得之命令行模式下如何配置连接无线网络

    kali liunx使用心得之命令行模式下如何配置连接无线网络 最近在使用kali时出现了一点小小的问题,由于我安装的是win10和kali双系统,为了能够在kali界面下自由操作win10下的磁盘, ...

  9. [arduino]ESP8266配置连接IoT阿里云平台(arduino D1 mini)

    [arduino]ESP8266配置连接IoT阿里云平台(arduino D1 mini) 前言 ESP8266配置(基础) ESP8266头文件配置 安装AliyunIoTSDK库 安装Arduin ...

最新文章

  1. 跌宕中,特斯拉拿下上海工厂,给蔚来们留下不到两年窗口期
  2. linux账号管理笔记
  3. shell脚本(查看多台服务器端口)
  4. linux core
  5. !--#include virtual='head.html'--代码复用
  6. Android之NetworkOnMainThreadException异常
  7. BZOJ1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
  8. 把VSCode当作记事本使用
  9. xp系统屏幕刷新率多少最合适--win7w.com
  10. GokeAudio是一款简约小巧的开源安卓SIP软电话客户端
  11. zyf整合ssm环境
  12. ZMQ专题学习之六:libzmq的订阅代理模式通信方式
  13. linux 磁盘隔离,Linux 磁盘坏道故障修复
  14. 仿真软件proteus构建LCD1602四线驱动实验
  15. MA5626 MA5821 POE供电版开启POE供电高优先级配置指导
  16. Ubuntu怎么知道去哪找安装软件?
  17. 使用C#在VS窗体应用中调起一个选择框,完成图片替换
  18. 空心三角形 C语言版
  19. oracle rac 仲裁盘_11G ORACLE OCR和仲裁盘恢复
  20. 0x000000f怎么修复 win10_win10系统开机蓝屏错误代码0xc000000f怎么解决

热门文章

  1. NGINX配置基于Node.js服务的负载均衡服务器
  2. 静态路由(实验讲解+配置)
  3. OSPF——NSSA区域及完全NSSA区域(含配置命令)、第七类LSA类型 LSA-7详解
  4. IEnumerable和IEnumerator详解
  5. 【JAVA 第三章 流程控制语句】课后习题 计算两个日期之间的天数
  6. 【Python爬虫】股票数据定向爬虫
  7. 【教程】VsCode搭建Java开发环境
  8. angular 模块构建_如何通过11个简单的步骤从头开始构建Angular 8应用
  9. azure 使用_如何使用JavaScript在Azure上开始使用SignalR
  10. gvim文本编辑器帮助_如何帮助您的文本编辑器帮助您