本文共 3685 字,大约阅读时间需要 12 分钟。
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 requestsimport jsonimport osimport randomdef 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)
转载地址:http://yzilf.baihongyu.com/