使用 python 请求传递带有“+”字符的电子邮件
Passing email with '+' character using python requests
我正在尝试将电子邮件传递到其中包含“+”字符的端点。端点接受 application/x-www-form-urlencoded。例如,如果我有 username=test+user@gmail.com,Postman 会创建以下 curl,其中包含“+”和“@”html 编码:
curl -X POST \
http://myurl.com/test \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Postman-Token: 07181aad-f4a5-4ac5-1720-dcb59d7e8310' \
-d username=test%2Buser%40gmail.com
此调用按预期工作
但是,在使用请求时,该字段似乎没有被编码。
import requests
if __name__ == "__main__":
timeout = 10
url = "https://myurl/test"
header_data = {'Content-Type': 'application/x-www-form-urlencoded'}
header_data = {}
payload = "username=test+user@gmail.com"
r = requests.request("POST", url, data=payload, headers=header_data, timeout=timeout)
print (r.request.body)
最终打印的结果不是编码字符串,而是:
username=test+user@gmail.com
如果您传入字符串,请求将 pass that payload on unmodified (see also the source)。使用
payload = {'username': "test+user@gmail.com"}
得到form-encoding.
我正在尝试将电子邮件传递到其中包含“+”字符的端点。端点接受 application/x-www-form-urlencoded。例如,如果我有 username=test+user@gmail.com,Postman 会创建以下 curl,其中包含“+”和“@”html 编码:
curl -X POST \
http://myurl.com/test \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Postman-Token: 07181aad-f4a5-4ac5-1720-dcb59d7e8310' \
-d username=test%2Buser%40gmail.com
此调用按预期工作
但是,在使用请求时,该字段似乎没有被编码。
import requests
if __name__ == "__main__":
timeout = 10
url = "https://myurl/test"
header_data = {'Content-Type': 'application/x-www-form-urlencoded'}
header_data = {}
payload = "username=test+user@gmail.com"
r = requests.request("POST", url, data=payload, headers=header_data, timeout=timeout)
print (r.request.body)
最终打印的结果不是编码字符串,而是:
username=test+user@gmail.com
如果您传入字符串,请求将 pass that payload on unmodified (see also the source)。使用
payload = {'username': "test+user@gmail.com"}
得到form-encoding.