request.data 的使用
- 访问网络的两种方法
get:
- 利用参数给服务器传递信息
- 参数为 dict,然后使用 parse 编码
案例 v1
# GET 方式请求
from urllib import request, parse
# 使用 parse 模块对 URL 进行参数编码
urls = "http://www.baidu.com/s?"
wd = input("请输入: ")
qs = {
"wd": wd
}
# 转换 URL 编码
qs = parse.urlencode(qs)
url = urls + qs
print(url)
rsp = request.urlopen(url)
html = rsp.read()
htm = html.decode()
print(htm)
post:
- 一般向服务器传递参数使用
- post 是把信息自动加密处理
- 想使用 post 信息,需要用到 data 参数
- 使用 post ,意味着需要对 HTTP 的请求头进行修改:
- Content-Type: application/x-www.form-urlencode
- Content-Length: 数据长度
- 一旦更改请求方法,注意其它请求头部信息相适应
- urllib.parse.urlencode 可以将字符串自动转换成上面
案例V1
格式
案例 v2
import json
from urllib import request, parse
"""
1. 利用 data 的构造内容,然后 URLopen 打开
2. 返回 json 格式的结果
3. 结果就应该是解释
"""
url = "http://fanyi.baidu.com/sug"
# 存放用来模拟 form 的数据,一定是 dict 格式
data = {
"kw": "girl"
}
# 使用 parse 模块对 data 进行编码
data = parse.urlencode(data).encode()
# 构造请求头, 请求头应该至少包含传入的数据长度
# request 要求传入的请求头是一个 dict 格式
header = {
"Content-Length": len(data)
}
# 拥有请求头,data, URL,就可以尝试发送请求
rsp = request.urlopen(url, data = data)
json_data = rsp.read().decode()
# 把 json 转换为 dict
json_data = json.loads(json_data)
# print(json_data)
for item in json_data['data']:
print(item['k'], ":", item['v'])
- 设置更多的请求信息,单纯的通过 URLopen 函数已经不好用了
- 需要利用 request.Request 类
import json
from urllib import request, parse
"""
1. 利用 data 的构造内容,然后 URLopen 打开
2. 返回 json 格式的结果
3. 结果就应该是解释
"""
url = "http://fanyi.baidu.com/sug"
# 存放用来模拟 form 的数据,一定是 dict 格式
data = {
"kw": "girl"
}
# 使用 parse 模块对 data 进行编码
data = parse.urlencode(data).encode('UTF-8')
# 构造请求头, 请求头应该至少包含传入的数据长度
# request 要求传入的请求头是一个 dict 格式
header = {
"Content-Length": len(data)
}
# 构造一个 Request 的实例
req = request.Request(url, data = data, headers=header)
# 因为已经构造了一个 request 的请求实例,所有的请求信息都可以封装在 Request 实例中
rsp = request.urlopen(req)
json_data = rsp.read().decode("UTF-8")
# 把 json 转换为 dict
json_data = json.loads(json_data)
# print(json_data)
for item in json_data['data']:
print(item['k'], ":", item['v'])