get 请求我们选择 腾讯天气 接口。首先我们看文档如下:
这里就相当于是接口文档,从这里我们可以获取到:请求方法、url、请求参数。
首先我们在 Postman 中尝试一下(Postman 很容易入手,可以用来辅助来学习):
通过 Postman ,我们能够正常访问数据。
接下来使用 requests 库:
import requests
from pprint import pprint
# url
url = 'https://wis.qq.com/weather/common?source=xw&weather_type=forecast_1h|forecast_24h|index|alarm|limit|tips'
# 构造数据,requests 全系列支持字典类型的数据
payload = {
# 参考文档中的参数部分,逐一构造
'province': '四川',
'city': '成都',
'county': '武侯区'
}
# 发送 get 请求,返回结果是服务端的响应数据
r = requests.get(url, params=payload)
# 获取响应报文体
# 1.以文本方式获取报文主体
pprint(r.text)
# 2. 以字典格式获取报文主体(仅针对返回是 json 格式的数据)
pprint(r.json())
# 3. 以二进制方式获取报文主体(视频、图片等)
pprint(r.content)
其实上面的代码,发送请求就一句话:
r = requests.get(url, params=payload)
其他代码都是在构造数据,获取响应。
当然 get 请求本身参数都在 url 中,我们也可以将参数构造在 url 中:
# url,注意参数我们通过&和键值对的形式放在了 url 中
url = 'https://wis.qq.com/weather/common?source=xw&weather_type=forecast_1h|forecast_24h|index|alarm|limit|tips&province=四川&city=成都&county=武侯区'
# 发送 get 请求,返回结果是服务端的响应数据
r = requests.get(url)
# 这里的响应是 json 格式的数据,我们直接通过 json() 方法查看
pprint(r.json())
不管使用字典构造参数,亦或者是直接拼接在 url 中,最终都会被 requests 自动为我们转码为标准的 url 格式,我们可以通过 r.request.url
查看请求中的实际 url 。
print(r.request.url)
## https://wis.qq.com/weather/common?...&county=%E6%AD%A6%E4%BE%AF%E5%8C%BA
关于响应对象中的其他属性,将在后面专门讲解。
关于header
一般我们是不需要专门处理请求的 header 信息,除非其中涉及到了认证的 token、或者 cookie 等数据需要同时传递给服务器。这得益于 requests 优秀的设计,很多常用的头部字段已由 requests 帮我们自动处理了。
requests 中关于 header 的处理,与参数很像,都是通过字典来构造。
比如,我这里传递用于标识请求数据类型的 content-type
字段:
headers = {
# 这里的头部字段不需要区分大小写
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
r = requests.get(url, headers=headers)
获取到响应的数据,说明我们的请求发送成功啦,后面就应该是对结果的断言咯。不过先稳一下,我们先把其他的方法了解一下。
网友评论