在python查询参数中使用%20而不是+作为空格

Jes*_*kum 21 python python-requests

我使用python请求(http://requests.readthedocs.org/en/latest/)编写了以下python脚本:

import requests

payload = {'key1': 'value  1', 'key2': 'value 2'}
headers = {'Content-Type': 'application/json;charset=UTF-8'}
r = requests.get("http://example.com/service", params=payload, headers=headers, 
             auth=("admin", "password"))
Run Code Online (Sandbox Code Playgroud)

如果我查看服务器的访问日志,传入的请求是:/ service?key1 = value ++ 1&key2 = value + 2

但是,服务器期望value%20%201&......

我已经读过使用+作为空格的占位符是内容类型application/x-www-form-urlencoded的一部分,但显然我已经请求了application/json.

有谁知道如何使用%20作为pythons请求的查询参数中的空格?

Bre*_*tty 11

为了跟进@ WeaselFox的回答,他们引入了一个接受quote_via关键字参数的补丁urllib.parse.urlencode.现在你可以这样做:

import requests
import urllib

payload = {'key1': 'value  1', 'key2': 'value 2'}
headers = {'Content-Type': 'application/json;charset=UTF-8'}
params = urllib.parse.urlencode(payload, quote_via=urllib.parse.quote)
r = requests.get("http://example.com/service", params=params, headers=headers,
    auth=("admin", "password"))
Run Code Online (Sandbox Code Playgroud)


小智 1

尝试一下。

import urllib
urllib.urlencode(params)
Run Code Online (Sandbox Code Playgroud)

http://docs.python.org/2/library/urllib.html#urllib.urlencode

  • AttributeError:模块“urllib”没有属性“urlencode” (2认同)