本博客文章内容翻译自Requests的官方文档,英语好的可以自行查看官方文档,地址戳这
请求
首先导入 requests模块
import requests
现在我们先请求得到一个网页
r = requests.get('https://api.github.com/events')
我们得到了一个名字为r的响应对象,我们可以从r中得到我们想要的信息。比如cookies,content,headers,等等。
HTTP的其他请求PUT,DELETE,HEAD,resquests也有对应的方法
r = requests.put('http://httpbin.org/put', data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')
在URLs中传递参数
如果想在请求的时候传入参数,可以用下面的代码
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('http://httpbin.org/get', params=payload)
在params中传入参数,参数的形式为键值对的形式
你可以看到在请求的时候URL是这样的
print(r.url) #打印r的url
http://httpbin.org/get?key2=value2&key1=value1 #结果
可以看到请求的URL中成功的接收到了我们传入的参数
响应
我们可以读到服务器发送给我们的响应
import requests
r = requests.get('http://www.baidu.com')
r.text
运行结果是这样的
<html><head><meta charset="utf-8"></head><body><script type="text/javascript" src="http://d.baldui.com:8477/pc.php?http://www.baidu.com/"></script></body></html>
JOSN响应
import requests
r = requests.get('https://api.github.com/events')
print r.json()
[{u’repository’: {u’open_issues’: 0, u’url’: ‘https://github.com/…
原始套接字响应
在一些特殊的场合,你可能想要从服务器中得到原始的套接字,你可以使用r.raw来获得,如果你想要这样做的话,首先要确保在你的请求中设置了stream=True
r = requests.get('https://api.github.com/events', stream=True)
r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
订制Headers
如果你想要在HTTP请求中加入请求头,一般的可以通过向headers中传入字典的形式,例如
url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
这样我们就在请求头中传入了user-agent。
更复杂的POST请求
如果我们想传入一些特殊的的数据,比如HTML表单,那么可以用data参数来搞定,
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)
# 打印结果如下
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}
或者上传的不是HTML表单,可以用JSON格式的数据
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
# 用json.dumps()方法将数据序列化
r = requests.post(url, data=json.dumps(payload))
上传文件
新建一个report.xls的文件,在files中即可完成上传
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
r.text
{
...
"files": {
"file": "<censored...binary...data>"
},
...
}
Timeouts
可以用timeouts来设置超时时间
requests.get('http://github.com', timeout=0.001)
timeout与响应的下载无关,如果超时时间内没有相应,就会抛出异常