python http请求常见问题解决方案

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')

参考:Python3的URL编码解码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值