在做爬虫的时候,如何生成一个靠谱可用的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; }
相关推荐
4. **Phonetic编码**:如Metaphone和Soundex,用于生成单词的音译表示,便于文本比较。 5. **BZip2解压**:虽然HttpClient主要处理HTTP通信,但Codec库也包含了一些压缩算法,如BZip2,可用于数据压缩和解压缩。 在...
2. 支持CGI(通用网关接口):允许执行服务器端脚本,如Perl或PHP,以动态生成内容。 3. 自定义处理函数:开发者可以注册回调函数,对特定的HTTP请求进行自定义处理。 4. 支持HTTPS:通过SSL/TLS加密,提供安全的...
### HTTPCLIENT 中文指南知识点详解 #### 一、HttpCore概览 **1.1 HTTP报文** **1.1.1 结构** HTTP报文主要由头部和可选的内容体构成。对于HTTP请求报文而言,头部由请求行和一系列头部字段组成;而HTTP响应报文...
标题“WebService通用調用方式及源碼”指的是这个压缩包包含了一种通用的调用WebService的方法以及相关的源代码。这意味着,无论你面对的是哪种类型的WebService,都可以使用这些工具类来进行调用,而不需要针对每个...
8. `commons-collections.jar` - Apache的通用集合框架,可能在HttpClient内部使用。 9. `json-lib.jar` - JSON处理库,如果需要解析或生成JSON格式的数据,可能用到。 10. `jackson-core-asl.jar` / `jackson-...
本文将深入探讨在Java环境中调用WebService的五种主要方式:Axis、CXF、HttpClient、MyEclipse反向生成以及XFire。 1. Axis:Apache Axis是最早且广泛使用的SOAP库,用于创建和消费Web服务。使用Axis调用WebService...
这个集成包包含的`tools.jar`可能包含了一些通用的Java开发工具类,`javassist-3.7.ga.jar`是一个动态类文件处理库,可能用于运行时修改类结构,`commons-collections-3.1.2.1.jar`和`commons-collections.jar`提供...
`commons-logging`是Apache的一个通用日志接口,可以适配多种日志实现,如log4j;`fastjson`是阿里巴巴提供的一个快速、强大且轻量级的JSON库,用于JSON解析和生成。 再来看压缩包子文件的文件名称列表,如`xalan-...
- `access_token`:获取此接口需要先调用微信的“获取access_token”接口,这是微信API的通用凭证。 2. **调用API**: 使用Java的HTTP客户端库,如Apache HttpClient或OkHttp,向微信API发送POST请求。请求URL...
- **HttpClient**:Java内置的HttpURLConnection或Apache HttpClient库可以用于编写自定义的Web服务测试脚本。 3. **WSDL和SOAP**:WSDL文件描述了Web服务的接口,包括服务的位置、使用的消息格式和操作。SOAP则是...
**Java实现** 在Java中,我们可以利用`java.net.HttpURLConnection`或`org.apache.http.client.HttpClient`库来发送带有认证信息的HTTP请求。而在服务端,可以使用Servlet或者Spring MVC等框架来处理这些认证请求。 ...
在C#中,可以使用各种技术来实现这一功能,如 WebClient 或 HttpClient 类进行网络通信,ZipArchive 类处理更新包的解压缩,以及Assembly类加载新版本的程序集。 在提供的文件列表中,我们可以看到几个关键的组件:...
总结来说,动态调用WebService在特定场景下非常有用,比如当Web服务的地址或接口在运行时才能确定,或者需要跨多个不同类型的Web服务进行通用调用时。理解并掌握这些技术可以帮助开发者在不牺牲灵活性的同时,实现与...
在IT行业中,安全是至关重要的一个方面,尤其是在网络通信中。CSDN博客作为一个知名的开发者社区,为了确保用户数据的安全,采用了特定的...同时,这也是一种通用的安全实践,适用于许多需要API调用和数据安全的场景。
这里存放通用api操作,其中攘括了通用Util,如二位码生成、中文转拼音、spring-bean方式格式化输出;除了Util外,tfidf为 中文分词 个人实现,可以说仿照Lucense 思想实现,可能在性能上有所欠缺;dbAccess 是自己 ...
【VB.NET实现腾讯AI通用文字识别Ocr&TTS】是一个基于Visual Basic .NET的项目,主要功能是利用腾讯AI的API进行文字识别(OCR)和文本到语音转换(TTS)。这个项目对于开发者来说,是一个很好的实践案例,可以帮助...
7. **条形码生成和识别**:条形码处理通常需要第三方库,如BarcodeWriter库或ZXing.NET,它们能生成和读取多种类型的条形码和二维码。如果类库包含了这些,将使得在C#项目中集成条形码功能变得简单。 8. **Excel...
C#提供了System.Xml和System.Text.Json命名空间,用于解析和生成这些数据结构。 4. **版本控制**: 在线更新需要比较本地应用版本与服务器上的最新版本,以便确定是否需要更新。C#中可以使用Version类来处理版本...
8. **数学和随机数**:Math类提供了各种数学函数,Random类用于生成随机数。 9. **序列化与反序列化**:DataContractSerializer和XmlSerializer用于将对象转换为XML或二进制格式,以便于存储和传输。 10. **反射**...
2. **JSON数据处理**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Content-Type: application/json表明工具在发送和接收数据时采用JSON格式,这...