Python请求在我的数据字典中处理链接

时间:2018-11-21 09:52:09

标签: python curl python-requests

我有一个看起来像这样的请求:

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)根本无法正常工作,而且格式设置也一团糟。

2 个答案:

答案 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)