文件上传
import requests
files = {'file': open('favicon.ico', 'rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)
cookies
import requests
r = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():
print(key + '=' + value)
session维持会话
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)
SSL证书验证
import requests
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
直接请求https会得出一个警告
解决方法:
1.忽略这个警告
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
2.通过捕获警告日志忽略广告
import logging
import requests
logging.captureWarnings(True)
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
3.通过本地证书
import requests
response = requests.get('https://www.12306.cn', cert=('/path/server.crt', '/path/key'))
print(response.status_code)
代理设置
对于某些网站,在测试的时候请求几次,能正常获取内容。但是一旦开始大规模爬取,对于大规模且频繁的请求,网站可能会直接登录验证,验证码,甚至直接把IP给封禁掉。
那么为了防止这种情况的发生,我们就需要设置代理来解决这个问题,在 Requests 中需要用到 proxies 这个参数。
可以用这样的方式设置:
import requests
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
requests.get('https://www.taobao.com', proxies=proxies)
除了基本的 HTTP 代理,Requests 还支持 SOCKS 协议的代理。
超时设置
import requests
r = requests.get('https://www.taobao.com', timeout=1)
print(r.status_code)
上面的设置 timeout 值将会用作 connect 和 read 二者的 timeout 总和。
如果要分别指定,就可以传入一个元组:
import requests
r = requests.get('https://www.taobao.com', timeout=(5,10))
print(r.status_code)
如果想永久等待,那么我们可以直接将 timeout 设置为 None,或者不设置直接留空,因为默认是 None。这样的话,如果服务器还在运行,但是响应特别慢,那就慢慢等吧,它永远不会返回超时错误的。
用法如下:
import requests
r = requests.get('https://www.taobao.com', timeout=none)
print(r.status_code)
import requests
r = requests.get('https://www.taobao.com')
print(r.status_code)
身份认证
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:5000', auth=HTTPBasicAuth('username', 'password'))
print(r.status_code)
简单写法
import requests
r = requests.get('http://localhost:5000', auth=('username', 'password'))
print(r.status_code)
Prepared Request
from requests import Request, Session
url = 'http://httpbin.org/post'
data = {
'name': 'germey'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'
}
s = Session()
req = Request('POST', url, data=data, headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)
更多高级用法请参考官方文档http://docs.python-requests.org/