【问题标题】:python requests module request params encoded url is different with the intended urlpython请求模块请求参数编码的url与预期的url不同
【发布时间】:2021-02-12 07:36:05
【问题描述】:

我在 python 项目请求模块上的 url 编码有问题。

这是我从wireshark数据包中得到的两个不同的url编码参数

  1. 0900+%28%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD+%ED%91%9C%EC%A4%80%EC%8B%9C% 29
  2. 0900%20(%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%20%ED%91%9C%EC%A4%80%EC%8B% 9C)

'1' 是 python 请求模块编码的 url,'2' 是来自 web 浏览器发送数据包的 url。 当我解码它们时,它显示相同的 utf-8 文本。

似乎它们之间对空格和括号的处理是不同的。 有没有办法可以将“1”更改为“2”?

这是我用来发送请求的代码

_url = "http://something"
_headers = {
    'Accept': 'text/javascript',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'ko-KR',
    'Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest'
}
_params = {
    'action': 'log',
    'datetime': '0900 (대한민국 표준시)'
    }

# This is the request part
session = requests.Session()
res = session.get(_url, headers=_headers, params=_params)

【问题讨论】:

  • 你能显示完整的代码吗?我的意思是这些数据是如何传递给请求的 get 或 post 方法的?
  • @VishalSingh 我编辑了代码。我使用 requests 模块 Session 对象来发送 get 和 post 请求。

标签: python http utf-8 python-requests urlencode


【解决方案1】:

您可以手动编码您的_params 以构造您的查询字符串,然后将其连接到您的_url

您可以使用urllib.parse.urlencode[Python-Docs] 转换 您的 _params 字典转换为百分比编码的 ASCII 文本字符串。所结果的 string 是一系列 key=value 对,由 & 字符分隔, 其中键和值都使用quote_via 函数引用。经过 默认情况下,quote_plus() 用于引用值,其中 表示空格被引用为+ 字符和/ 字符 编码为%2F,遵循GET请求的标准 (应用程序/x-www-form-urlencoded)。一个替代功能,可以是 传递为quote_viaquote(),它将对空格进行编码 为%20,而不是编码/ 字符。为了最大限度地控制什么是 引用,使用quote 并指定一个安全值。


from urllib.parse import quote_plus, quote, urlencode
import requests

url_template = "http://something/?{}"
_headers = { ... }
_params = {"action": "log", "datetime": "0900 (대한민국 표준시)"}
_url = url_template.format(urlencode(_params, safe="()", quote_via=quote))

response = requests.get(_url, headers=_headers)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多