Python требует возиться со ссылками в моем Dict данных - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть запрос, который выглядит следующим образом:

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 голосов
/ 22 ноября 2018

Используйте --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)
0 голосов
/ 21 ноября 2018

Предполагая, что вы отправляете данные в формате JSON, затем отправляете данные с параметром json вместо data

request = requests.post(url=URL, json=data, verify=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...