3

Я делаю платеж с помощью PayPal. Вот как это работает должным образом с requests:Покрытие POST от запросов к GAE urlfetch

res = requests.post(get_payment_info_url, headers=headers, data=params) 
res_data = res.json() 

Но тогда, когда я пытаюсь сделать то же запрос с urlfetch, он дает мне ошибку (200-ответа от PayPal, но платеж не удастся):

res = urlfetch.fetch(url=make_payment_url, payload=params, method=urlfetch.POST, headers=headers) 
res_data = json.loads(res) 

{u'responseEnvelope': {u'timestamp': u'2015-02-15T23:21:52.729-08:00', u'ack': u'Failure', u'build': u'15089777', u'correlationId': u'e202988541fde'}, 
u'error': [{u'domain': u'PLATFORM', u'message': u'Invalid request: {0}', u'severity': u'Error', u'subdomain': 
u'Application', u'category': u'Application', u'errorId': u'580001'}]} 

Кажется, что, возможно, Google лишает заголовки или что-то еще? Как я могу сделать этот запрос, если Google это сделает?

Наконец, есть ли причины для использования urlfetch над requests (который я импортируемыми локально в моем проект GAE? Просьба кажется намного проще и «дружественные» для использования.

ответ

4

Для этого, полезной нагрузки должна . быть urlencoded Вот что работал:

res2 = urlfetch.fetch(
       url, 
       headers=headers, 
       method='POST', 
       payload=urllib.urlencode(params) 
       ) 
res2_data = json.loads(res2.content) 
3

Посмотрите на https://github.com/paypal/PayPal-Python-SDK мне удалось исправить эту LIB легко работать с GAE, как описано здесь: https://github.com/paypal/PayPal-Python-SDK/issues/66

просит работает на GAE, но только версия 2.3.0 (!)

на Google AppEngine (версия 1.9.17) requestsверсия 2.3.0 (только!) работы В ПРОИЗВОДСТВЕ (но не на SDK) если у вас включен биллинг, что обеспечивает поддержку сокетов.

запросы на Appengine SDK не может со всеми https: // запросы:

ConnectionError: ('Connection aborted.', error(13, 'Permission denied')) 

запросы версия 2.4.1 терпит неудачу с:

File "distlib/requests/adapters.py", line 407, in send 
    raise ConnectionError(err, request=request) 
    ConnectionError: ('Connection aborted.', error(13, 'Permission denied')) 

запросов версии 2.5.1 терпит неудачу с:

File "distlib/requests/adapters.py", line 415, in send 
    raise ConnectionError(err, request=request) 
    ConnectionError: ('Connection aborted.', error(13, 'Permission denied')) 

Информация о поддержке на гнездах: https://cloud.google.com/appengine/docs/python/sockets/

Смежные вопросы