这里的 requests 是指 Python 的 requests 包。
1、requests 的常见用法
requests 除了 url 之外,还有 params, data 和 files 三个参数,用于和服务器后台交互。
1.1、提交查询
注意 get 只支持 params ,不支持 data 和 files。
requests.get(login_url, params={
"user": user,
"password": password,
})
1.2、提交表格
注意,requests.post
既支持data
,也支持params
:
requests.post(form_submit_url, data={
"user": user,
"password": password,
}, params={
"pool": pool,
})
1.3、在提交时附加文件:
files = ["a.csv", "b.xml"]
# 注意file需要以binary形式打开。
files = [("files", (os.path.basename(file), open(file, "rb")))
for file in files]
r = requests.post(url, files=files, data=data, params=params)
1.4、保持状态
使用 session 保持状态,先登录,再提交表格:
session = requests.Session()
session.get(login_url, params)
session.post(form_submit_url, data)
1.5、查看结果
最重要的是status_code
、reason
和content
三个成员变量:
r = requests.post(url, files=files, data=data, params=params)
if r.status_code != 200:
print(r.status_code, r.reason) # 打印出错信息。
else:
print(r.content) # 服务器返回结果
2、django 的处理
2.1、params 传入的参数
对于 requests 通过 params 传入的参数,可以通过request.GET
获取:
def handler(request):
return request.GET["pool"] # 若未传入参数,将抛出异常
# return request.GET.get("pool") # 当没有传入该参数时,返回None
# return request.GET.get("pool", "abc") # 默认为abc
2.2、data 传入的参数
对于 requests 通过 data 传入的参数,可以通过request.POST
获取:
def handler(request):
return request.POST["user"] # 若未传入参数,将抛出异常
# return request.POST.get("user") # 当没有传入该参数时,返回None
# return request.POST.get("user", "abc") # 默认为abc
2.3、files 传入的参数
对于 requests 通过 files 传入的参数,可以通过request.FILES
获取:
def handler(request):
for file in request.FILES.getlist("files"):
name = file.name
content = file.file.read() # is binary
open(name, "wb").write(content) # 保存到本地
Q. E. D.