requests库官方文档:快速上手 - Requests 2.18.1 文档
get请求但是需要用body传参
将body参数放到data形参中传递,但是需要先将参数json.dumps()序列化
data格式化
如果请求失败,可以尝试在headers中添加'Content-Type': 'application/json'
import requests
params = {
"username": "zhangsan"
}
resp = requests.request("GET", url, headers=headers, data=json.dumps(params))
# 输出响应body
logger.info("response:\n{}".format(resp.text)) # 没有格式化
print(json.loads(resp.text)) # 格式化之后的
# 也可以尝试使用.json()方法一步到位获取格式化之后的 response body
print(resp.json())
注意:
这种情况下如果想使用postman来传参,需要将body中的参数放在选择「raw』形式的「body」,而不是form-data形式,否则得不到预期的请求结果,因为「raw」和 「form-data」两种形式还是有差别的。
自动生成curl
使用curlify库,使用前需要先 pip 安装
import requests
import curlify
resp = requests.request("GET", url, headers=headers)
curl = curlify.to_curl(resp.request)
print(curl)
参考:requests与CURL的相互转换 - 江湖乄夜雨 - 博客园
如果想学习curl 命令,可以参考:curl命令常用参数
获取请求 headers
resp = requests.get(url)
request_headers = resp.request.headers
encoding = request_headers["encoding"]
参考:requests模块获取请求和响应的信息_FreeSpider-CSDN博客_requests查看请求头
url参数的编解码
浏览器会对url中的中文字符进行编码,所以经常在url中看到很多%这样的转义字符,有时我们必须获取编码之前的参数列表,比如需要用encode之前的参数列表来生成签名,否则生成的签名是不可用的。有时候解码一次还不够,需要解码两次才可以获取原来的 url 。
# 编码 from urllib.parse import quote text = quote(text, encoding='utf-8') # 解码 from urllib.parse import unquote text = unquote(text, encoding='utf-8')