Requests 是一个非常强大的 HTTP 请求库,基于 urllib,使网络请求变的非常简洁
官方文档
安装
利用 pip
安装
$ pip3 install requests
利用 easy_install
easy_install requests
初步尝试
首先我们引入一个小例子来感受一下
import requests
r = requests.get("http://www.baidu.com", )
print(type(r))
print(r.status_code)
print(r.encoding)
# print(r.text) print(r.cookies)
print(r.headers["content-type"])
# print(r.json())
基本请求
requests
库提供了http
所有的基本请求方式
例如
r = requests.get("http://httpbin.org/get")
r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")
一句话搞定
基本GET请求
最基本的GET请求可以直接用get方法
r = requests.get("http://httpbin.org/get")
如果想要加参数,可以利用 params 参数
import requests
params = {"username": "mazy", "password":"xxxx"}
r = requests.get("http://httpbin.org/get", params=params)
print(r.url) # http://httpbin.org/get?username=mazy&password=xxxx
请求JSON文件,可以利用 json() 方法解析
r = requests.get("http://httpbin.org/get")
print(r.text)
print(r.json())
如果想添加 headers,可以传 headers 参数
params = {"username": "mazy", "password":"xxxx"}
headers = {'content-type': 'application/json'}
r = requests.get("http://httpbin.org/get", params=params, headers=headers)
基本POST请求
对于 POST 请求来说,我们一般需要为它增加一些参数。那么最基本的传参方法可以利用 data 这个参数
import requests
params = {"username": "mazy", "password":"xxxx"}
r = requests.post("http://httpbin.org/post", data=params)
print(r.url)
print(r.text)
有时候我们需要传送的信息不是表单形式的,需要我们传JSON格式的数据过去,所以我们可以用 json.dumps() 方法把表单数据序列化
import requests
import json
params = {"username": "mazy", "password":"xxxx"}
r = requests.post("http://httpbin.org/post", data=json.dumps(params))
print(r.url)
print(r.text)
如果想要上传文件,那么直接用 file 参数即可
新建一个 a.txt
的文件,内容写上 Hello World!
import requests
url = 'http://httpbin.org/post' files = {"file": open("text.txt", "rb")}
r = requests.post(url, files=files)
print(r.text)
Cookies
用 cookies
变量来得到站点的 cookies
另外可以利用 cookies
变量来向服务器发送 cookies
信息
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
print(r.text)
超时配置
可以利用 timeout
变量来配置最大请求时间
r = requests.get("http://httpbin.org/get", timeout=10)
会话对象
在以上的请求中,每次请求其实都相当于发起了一个新的请求。也就是相当于我们每个请求都用了不同的浏览器单独打开的效果。也就是它并不是指的一个会话,即使请求的是同一个网址
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)
SSL证书验证
现在随处可见 https
开头的网站,Requests
可以为HTTPS
请求验证SSL
证书,就像web浏览器一样。要想检查某个主机的SSL证书,你可以使用 verify
参数
现在 12306 证书不是无效的嘛,来测试一下
import requests
r = requests.get('https://kyfw.12306.cn/otn/', verify=True)
print(r.text)
报错:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
如果我们想跳过刚才 12306 的证书验证,把 verify
设置为 False
即可
import requests
r = requests.get('https://kyfw.12306.cn/otn/', verify=False)
print(r.text)
在默认情况下 verify 是 True
,所以如果需要的话,需要手动设置下这个变量。
代理
如果需要使用代理,你可以通过为任意请求方法提供 proxies
参数来配置单个请求
import requests
proxies = {"https" : "http://41.118.132.69:443"}
r = requests.post("http://httpbin.org/post", proxies=proxies)
print(r.text)
API
以上讲解了 requests
中最常用的参数,如果需要用到更多,请参考官方文档 API