最近在做爬虫的时候遇到了一个问题,在用requests的session方法保持cookie的时候发现requests不能保持手动构建的cookie。起初以为requests只能自动保持由服务器返回的set-cookie语句中的cookie。后来查了很多资料,才终于明白。原来requests只能保持 cookiejar 类型的cookie,而我们手动构建的cookie是dict类型的。所以要把dict转为 cookiejar类型,于是我又在网上查,在几乎打算放弃的时候终于找到了一个把dict转为cookiejar的方法,如下:
以上代码是我在下面这个网站上查到的,感谢这个博客的作者!这篇文章上还介绍了一些官方文档中没有提到的方法。
—————————-以下是原文———————————
Python标准库中用来处理HTTP的模块是urllib2,不过其中的API太零碎了,requests是更简单更人性化的第三方库。
用pip下载:
pip install requests
或者git:
git clone git://github.com/kennethreitz/requests.git
发送请求:
GET方法
也可以将请求方法放在参数中:
传递参数或上传文件:
1.如果要将参数放在url中传递,使用params参数,可以是字典或者字符串:
2.如果要将参数放在request body中传递,使用data参数,可以是字典,字符串或者是类文件对象。
使用字典时将发送form-encoded data:
使用字符串时将直接发送数据:
流上传:
3.如果要上传文件,可以使用file参数发送Multipart-encoded数据,file参数是{ ‘name’: file-like-objects}格式的字典 (or {‘name’:(‘filename’, fileobj)}) :
也可以明确设置filename, content_type and headers:
一次性上传多个文件:
设置Headers
Response对象:
获取unicode字符串,会自动根据响应头部的字符编码(r.encoding)进行解码,当然也可以自己设定r.encoding:
获取bytes字符串,会自动解码gzip和deflate数据:
要存储web图片,可以:
可以解码json对象:
如果不想一次性处理全部的数据,可以:
也可以迭代的处理数据:
或者:
获取响应代码:
获取响应headers:
获取发送的headers
获取cookie,返回CookieJar对象:
将CookieJar转为字典:
将字典转为CookieJar:
上传自己设置的cookie,使用cookies参数,可以是字典或者CookieJar对象:
如果需要在会话中保留cookie,需要用到后面要说的Session。
Redirection and History
可以用history属性来追踪redirection
要在会话中保留状态,可以使用request.Session()。
Session可以使用get,post等方法,Session对象在请求时允许你保留一定的参数和自动设置cookie
也可以自己设置headers,cookies:
预设Request
可以在发送request前做些额外的设定
验证
Basic Authentication
因为HTTP Basic Auth很常用,所以也可以直接验证:
也可以使用自己写的验证类。比如某个web服务接受将X-Pizza报头设置成密码的验证,可以这样写验证类:
使用:
SSL证书验证
检查主机的ssl证书:
github是有的:
如果你设置验证设置为False,也可以忽略验证SSL证书。
可以读取验证文件:
代理
使用代理:
可以设置环境变量:
如果代理需要验证:
知识无穷尽也。