大佬的话(一)

关于如何使用Requests

这应该算是最频繁使用的第三方库了,经常写法如下:

大佬的话(一)

而我也这样使用了很长一段时间,直到有一次遇到了一个问题:程序一直卡在这里,没有任务输出,刚开始想是不是headers变了,还是代理又挂了,试了很多遍,发现问题还是没有解决。

去问大佬,大佬轻描淡写的说了一句:加上超时。当时我就明白了,没有设置该请求的超时时间,该请求一直到等待对方响应,对方又不给请求,所以才没有任何输出。

以后,我会在发送每条请求时都加上超时时间,requests就是加timeout

大佬的话(一)

scrapy则是设置DOWNLOAD_TIMEOUT,同时也可以在meta中为指定reques设置,如:

大佬的话(一)

不写回调函数默认是parse

大佬又告诉我,在每个地方使用requests不方便管理,你应该把它封装为一种方法,可以在别的地方调用,形如下:

大佬的话(一)

看到这里,就必须要看下requests的源码,比如最常见的get方法,用到的是request

大佬的话(一)

再看看request,最终还是调用session.request

大佬的话(一)

session.request的可选参数

大佬的话(一)

1. method(必要):方法,get、post、head等

2. url(必要):网址链接

3. params:请求的查询字符串

4. data:发送表单对象

5. headers:HTTP Headers

6. cookies:与Request一起发送的Dict或CookieJar对象

7. files:上传的文件对象

8. auth:HTTP Auth

9. timeout:超时时间

10. allow_redirects:允许重定向。默认True

11. proxies:代理

12. hooks:回调挂钩字典,供内部使用。

13. stream:如果为False,将立即下载响应内容。默认情况下,发出请求时,会立即下载响应正文

14. verify:验证服务器证书,默认为True

15. cert:ssl客户端证书文件

16. json:可以发送json数据

完整代码 [requests源码] ,可以在github上找到

对了,以前一直有疑问,到底是requests.session(),还是requests.Session(),这里已经说的很明白了:

大佬的话(一)