将 POST 从请求转换为 GAE urlfetch
Coverting POST from requests to GAE urlfetch
我正在使用 PayPal 付款。以下是它如何与 requests
:
一起正常工作
res = requests.post(get_payment_info_url, headers=headers, data=params)
res_data = res.json()
但是当我尝试使用 urlfetch
执行相同的请求时,它给了我一个错误(来自 PayPal 的 200 响应,但付款失败):
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在剥离headers什么的?如果 Google 正在这样做,我将如何提出这个请求?
最后,是否有任何理由使用 urlfetch
而不是 requests
(我已经在本地导入到我的 GAE 项目中?请求似乎更容易使用 'friendly'。
为此,需要对有效负载进行 urlencoded。这是有效的方法:
res2 = urlfetch.fetch(
url,
headers=headers,
method='POST',
payload=urllib.urlencode(params)
)
res2_data = json.loads(res2.content)
看看 https://github.com/paypal/PayPal-Python-SDK 我设法轻松地修补这个库以使用 GAE,如下所述:
https://github.com/paypal/PayPal-Python-SDK/issues/66
Requests 适用于 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/
我正在使用 PayPal 付款。以下是它如何与 requests
:
res = requests.post(get_payment_info_url, headers=headers, data=params)
res_data = res.json()
但是当我尝试使用 urlfetch
执行相同的请求时,它给了我一个错误(来自 PayPal 的 200 响应,但付款失败):
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在剥离headers什么的?如果 Google 正在这样做,我将如何提出这个请求?
最后,是否有任何理由使用 urlfetch
而不是 requests
(我已经在本地导入到我的 GAE 项目中?请求似乎更容易使用 'friendly'。
为此,需要对有效负载进行 urlencoded。这是有效的方法:
res2 = urlfetch.fetch(
url,
headers=headers,
method='POST',
payload=urllib.urlencode(params)
)
res2_data = json.loads(res2.content)
看看 https://github.com/paypal/PayPal-Python-SDK 我设法轻松地修补这个库以使用 GAE,如下所述: https://github.com/paypal/PayPal-Python-SDK/issues/66
Requests 适用于 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/