我有一个看起来像这样的请求:
data = {
'USER': params['PARTNER'],
'PWD': params['PWD'],
'RETURNURL': 'https://my-site.com/',
'CURRENCY': 'USD',
}
request = requests.post(url=URL, data=data, verify=False)
当我在外壳程序中的相同cURL命令中运行此命令时,完全没有问题。但是,当我通过请求执行此操作时,RETURNURL参数似乎有些混乱。它完全保留在cURL中,但是从请求中进行处理时,当我在请求的另一端看到它时,它最终看起来像这样,并且一切都不起作用:
https%3A%2F%2Fmy-site.com%2F
谢谢,永远在这里!
在cURL中成功使用的实际命令是:
curl https://pilot-payflowpro.paypal.com \
-s \
--insecure \
-d PARTNER=PayPal \
-d PWD=MyPassword \
-d VENDOR=MyMerchantID \
-d USER=MyMerchantID \
-d TENDER=C \
-d ACCT=5105105105105100 \
-d TRXTYPE=S \
-d EXPDATE=1221 \
-d RETURNURL=https://my-site.com/
-d AMT=1.00
请注意,一切工作正常,但是我提交的参数(即URL)根本无法正常工作,而且格式设置也一团糟。
答案 0 :(得分:0)
假设您要以JSON格式发送数据,然后使用json
参数而不是data
发送数据
request = requests.post(url=URL, json=data, verify=False)
答案 1 :(得分:0)
使用--trace-ascii log.txt
来记录curl的发布过程。
卷曲
=> Send data, 161 bytes (0xa1)
0000: PARTNER=PayPal&PWD=MyPassword&VENDOR=MyMerchantID&USER=MyMerchan
0040: tID&TENDER=C&ACCT=5105105105105100&TRXTYPE=S&EXPDATE=1221&RETURN
0080: URL=https://my-site.com/&AMT=1.00
对data = data_dict
的请求
Content-Length: 169
ACCT=5105105105105100&TENDER=C&EXPDATE=1221&PARTNER=PayPal&RETURNURL=https%3A%2F%2Fmy-site.com%2F&VENDOR=MyMerchantID&USER=MyMerchantID&TRXTYPE=S&AMT=1.00&PWD=MyPassword
因此,您可以尝试将数据发布为字符串,如@Mortz所说。
import requests
data = {
'PARTNER':'PayPal',
'VENDOR':'MyMerchantID',
'TENDER':'C',
'ACCT':'5105105105105100',
'TRXTYPE':'S',
'EXPDATE':'1221',
'AMT':'1.00',
'USER': 'MyMerchantID',
'PWD': 'MyPassword',
'RETURNURL': 'https://my-site.com/',
}
data = "&".join("{}={}".format(k,v) for k,v in data.items())
print(len(data), data)
url = "https://pilot-payflowpro.paypal.com"
request = requests.post(url=URL, data=data, verify=False)