0

我正在使用 python 包请求向服务器发出获取请求。我的目标是复制某些已知的 http 请求并将它们合并到我的 python 脚本中。原始查询字符串包含一个键值对“version=0%2E12”,我知道它是“version=0.12”的 url 编码等效项。下面是我正在做的复制 http 请求的示例。

params = {
          'version'='0.12',
          'language'='en',
          ...
          }
 resp = requests.get(url, params)

生成的 url 查询字符串中包含 'version=0.12'。如果我尝试将 params 的设置更改为以下内容,

    params = {
          'version'='0%2E12',
          'language'='en',
          ...
          }

但生成的查询字符串包含“版本=0%252E31”。本质上,请求是解析 % 以进行 url 编码。

如何在不手动编写整个 url 的情况下获得正确解析带有句点的 params 参数的请求?

4

1 回答 1

2

请注意,这.是 URL 编码值中完全有效的字符。

您需要自己编码值,绕过标准编码。我会使用urllib.urlencode(),然后手动替换.字符%2E

然后,您必须将编码字符串作为查询参数附加到 URL,并配置requests为不重新编码值:

params = {
      'version'='0.12',
      'language'='en',
      ...
      }
params = urllib.urlencode(params)
params = params.replace('.', '%2E')
resp = requests.get('?'.join(url, params), config={'encode_uri': False})

设置为的encode_uri参数False在这里可以解决问题;这是requests默认值,否则将重新编码整个 URL 以确保 RFC 合规性。

于 2012-11-30T21:16:14.790 回答