requests库是基于urllib编写的,方便HTTP请求的python库。
要使用requests模块,就需要先引入import requests
。
requests模块中主要包括以下方法:
方法 | 解释 |
---|---|
requests.request() | 构造一个请求,支持以下各种方法 |
requests.get() | 获取html的主要方法 |
requests.head() | 获取html头部信息的主要方法 |
requests.post() | 向html网页提交post请求的方法 |
requests.put() | 向html网页提交put请求的方法 |
requests.patch() | 向html提交局部修改的请求 |
requests.delete() | 向html提交删除请求 |
以get为例
def get(url, params=None, **kwargs)
requests.get(url=srvUrl, params=param, headers=header)
requests请求一般有如下一些参数:
文件参数用于文件上传,常用两种格式:
'name': fileobj
:字段名与服务端匹配即可;{'name': file-tuple}
:文件元组为('filename', fileobj[, 'content_type'[, custom_headers]])
可通过元组传递多个文件:
upFile = {
'file': (name, open('conf.xml', 'rb'))
}
upFiles = [
('images', ('foo.png', open('foo.png', 'rb'), 'image/png')),
('file', ('conf.json', open('myJson.json', 'rb')))
]
HTTP请求返回为response对象,其对应的常见属性:
属性 | 说明 |
---|---|
r.status_code | http请求的返回状态,若为200则表示请求成功。 |
r.text | http响应内容的字符串形式,即返回的页面内容 |
r.encoding | 从http header 中猜测的相应内容编码方式 |
r.headers | 返回的头信息 |
r.content | http响应内容的二进制形式 |
r.json() | 以json格式获取返回的内容 |
程序所需导入的模块与用于格式化Json的辅助函数
import requests
import json
import os
import random
def pretty_print(data):
out = json.dumps(data, sort_keys=False, indent=4, separators=(',', ':'))
print(out)
设get需要query、page两个参数,且返回json格式的数据:
def get_request(srvUrl):
try:
header = {"Content-Type": "application/json;charset=UTF-8"}
param = { # query参数
"query": "test",
}
param["page"] = True # 字典中可随意增加参数
resp = requests.get(url=srvUrl, params=param, headers=header)
print(resp)
if resp.content:
pretty_print(resp.json()) # 返回json格式body体
except Exception as ex:
print(ex)
设上传的body为JSON格式的(可通过json或data参数设定)
def post_request(srvUrl):
try:
header = {"Content-Type": "application/json;charset=UTF-8"}
body = { # JSON格式body数据
"query": "test-" + str(random.randint(1000, 9999)),
"page": 0,
"size": 10
}
# resp = requests.post(url=srvUrl, headers=header, data=json.dumps(body))
resp = requests.post(url=srvUrl, headers=header, json=body)
print(resp)
except Exception as ex:
print(ex)
文件内容以content属性返回,只需把其写入到文件中即可:
def export_file(srvUrl, file):
try:
header = {"Content-Type": "application/json;charset=UTF-8"}
resp = requests.post(url=srvUrl, headers=header)
print(resp)
if resp.status_code != requests.codes.ok:
return # error!
header = resp.headers
name = header.get("Content-Disposition") # 假设头中携带文件信息,可获取用于写文件
print(name)
with open(file, "wb") as conf:
conf.write(resp.content)
except Exception as ex:
print(ex)
上传的文件以files参数设定:
def import_file(srvUrl, file):
try:
header = {"Content-Type": "application/json;charset=UTF-8"}
resp = requests.post(url=srvUrl, headers=header)
print(resp)
if resp.status_code != requests.codes.ok:
return # error!
name = os.path.basename(file)
with open(file, "rb") as conf:
upFile = {
'file': (name, conf)
}
resp = requests.post(url=srvUrl, files=upFile)
print(resp)
except Exception as ex:
print(ex)