在爬虫,发现一个很特殊的请求头::authority, :method, :path, :scheme
。几番操作,要不无法解析请求头,要不就是得不到正确的结果。历时至少一天了,整个搜索逻辑我也贴一下,蓝灯翻不了,用百度要死,每一个正确,搜索的内容答非所问,发现bing搜索可以代替一下谷歌。
在此圈粉bing搜索,还分国内和国际版:http://cn.bing.com
一般情况的请求头为http1的请求头,如下:
最近做爬虫,发现一个请求头如下:
我便按一般的设置,结果会爆一下的错误:
ValueError: Invalid header name b':authority'
经过一番的搜索(不要用百度,百度弱鸡,不能用谷歌,就用bing吧),
发现是源码无法解析的问题:
显然,我们必须在Java还没有准备好支持HTTP2客户端编程的情况下(即使用Java 8及以下版本),提供HTTP2客户端应用的解决方案。目前流行的类库如下:
- OkHttp
- Eclipse Jetty
- Netty
- Apache HttpComponents (Apache HC)
其中,Eclipse Jetty和Netty都同时提供客户端和服务端。而曾经广泛使用的Apache HC已经逐渐掉队,至今没有正式支持HTTP2的版本发布。所以这里特别推荐OkHttp,而且OkHttp还适合在Android应用中作为HTTP客户端。
OkHttp的最新版本3.10.0,2018年2月25日发布,特性如下:
- 支持HTTP2,默认采用TLS 1.2
- GZIP压缩
- 缓存响应对象
准备jar包
二丶get请求
package com.lxl.learn.okhttp3;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Learn_Okhttp3 {
public static voi