4.3 复杂请求的发送

4.3.1 设置请求头

大多数的服务器都会检测请求头信息,判断当前请求是否来自浏览器的请求。使用request()方法设置请求头信息时,只需要为headers参数指定一个有效的字典(dict)类型的请求头信息即可。所以在设置请求头信息前,需要在浏览器中找到一个有效的请求头信息,以火狐浏览器为例,首先按F12键打开“开发者工具箱”,然后单击“网络”,接着在浏览器地址栏中任意打开一个网页(如https://www.baidu.com/),在请求列表中选中一项请求信息,最后在“消息头”中找到请求头信息。具体步骤如图4.4所示。

图4.4 获取请求头信息

【例4.8】 设置请求头。(实例位置:资源包\Code\04\08)

请求头信息获取完成以后,将User-Agent设置为字典(dict)数据中的键,后面的数据设置为字典(dict)中value。示例代码如下:

程序运行结果如图4.5所示。

图4.5 查看返回的请求头信息

4.3.2 设置超时

【例4.9】 设置超时。(实例位置:资源包\Code\04\09)

在没有特殊要求的情况下,可以将设置超时的参数与时间填写在request()方法或者PoolManager()实例对象中。示例代码如下:

程序运行结果如图4.6所示。

图4.6 超时异常信息

如果需要更精确地设置超时,可以使用Timeout实例对象,在该对象中可以单独设置连接超时与读取超时。示例代码如下:

或者是

4.3.3 设置代理

【例4.10】 设置代理。(实例位置:资源包\Code\04\10)

在设置代理IP时,需要创建ProxyManager对象,在该对象中最好填写两个参数。一个是proxy_url,表示需要使用的代理IP;另一个参数为headers,就是为了模拟浏览器请求,避免后台服务器发现。示例代码如下:

程序运行结果如下:

注意

免费代理存活的时间较短,提醒读者使用正确有效的代理IP。