大佬的话(一)
关于如何使用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(),这里已经说的很明白了: