【问题标题】:Braintree errors with GAE - Connection Errors - 5 Attempt to get blocked socket optionGAE 的 Braintree 错误 - 连接错误 - 5 尝试获取阻塞的套接字选项
【发布时间】:2015-10-09 11:22:11
【问题描述】:
INFO     2015-10-09 11:07:31,718 connectionpool.py:695] Starting new HTTPS connection (1): api.sandbox.braintreegateway.com
DEBUG    2015-10-09 11:07:31,724 api_server.py:277] Handled remote_socket.Resolve in 0.0028
DEBUG    2015-10-09 11:07:31,728 api_server.py:277] Handled remote_socket.CreateSocket in 0.0009
DEBUG    2015-10-09 11:07:32,049 api_server.py:277] Handled remote_socket.Connect in 0.3168
DEBUG    2015-10-09 11:07:32,055 api_server.py:272] Exception while handling service_name: "remote_socket"
method: "GetSocketOptions"
request: "\n$d15a35d7-d299-43c1-ba76-8bf4107f8850\022\006\010\001\020\003\032\000"
request_id: "aiUMNcTaLS"

Traceback (most recent call last):
  File "/home/abc/Downloads/google-appengine/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 247, in _handle_POST
    api_response = _execute_request(request).Encode()
  File "/home/abc/Downloads/google-appengine/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 186, in _execute_request
    make_request()
  File "/home/abc/Downloads/google-appengine/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 181, in make_request
    request_id)
  File "/home/abc/Downloads/google-appengine/google_appengine/google/appengine/api/apiproxy_stub.py", line 131, in MakeSyncCall
    method(request, response)
  File "/home/abc/Downloads/google-appengine/google_appengine/google/appengine/api/remote_socket/_remote_socket_stub.py", line 56, in WrappedMethod
    return method(self, *args, **kwargs)
  File "/home/abc/Downloads/google-appengine/google_appengine/google/appengine/api/remote_socket/_remote_socket_stub.py", line 265, in _Dynamic_GetSocketOptions
    'Attempt to get blocked socket option.')
ApplicationError: ApplicationError: 5 Attempt to get blocked socket option.


DEBUG    2015-10-09 11:07:32,056 api_server.py:277] Handled remote_socket.GetSocketOptions in 0.0014
INFO     2015-10-09 11:07:32,058 views.py:570] handle_exception
INFO     2015-10-09 21:28:17,317 views.py:559] Traceback (most recent call last):

  File "/home/abc/Downloads/google-appengine/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)

  File "/home/abc/projects/src/views.py", line 806, in get
    self._callHandlingMethod(url, self.getRegexps)

  File "/home/abc/projects/src/views.py", line 883, in _callHandlingMethod
    function(*matched.groups())

  File "/home/abc/projects/src/views.py", line 2992, in buy_get
    "client_token": braintree.ClientToken.generate(),

  File "/home/abc/projects/src/lib/braintree/client_token.py", line 25, in generate
    return gateway.generate(params)

  File "/home/abc/projects/src/lib/braintree/client_token_gateway.py", line 17, in generate
    response = self.config.http().post("/client_token", params)

  File "/home/abc/projects/src/lib/braintree/util/http.py", line 49, in post
    return self.__http_do("POST", path, params)

  File "/home/abc/projects/src/lib/braintree/util/http.py", line 66, in __http_do
    status, response_body = http_strategy.http_do(http_verb, full_path, self.__headers(), request_body)

  File "/home/abc/projects/src/lib/braintree/util/http.py", line 87, in http_do
    timeout=self.config.timeout

  File "/home/abc/projects/src/lib/requests/api.py", line 92, in post
    return request('post', url, data=data, **kwargs)

  File "/home/abc/projects/src/lib/requests/api.py", line 48, in request
    return session.request(method=method, url=url, **kwargs)

  File "/home/abc/projects/src/lib/requests/sessions.py", line 451, in request
    resp = self.send(prep, **send_kwargs)

  File "/home/abc/projects/src/lib/requests/sessions.py", line 557, in send
    r = adapter.send(request, **kwargs)

  File "/home/abc/projects/src/lib/requests/adapters.py", line 407, in send
    raise ConnectionError(err, request=request)

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

这似乎是一个 https 问题。我尝试了不同的方法

a) https://github.com/agfor/braintree-python-appengine 。给了我同样的错误

b) 我认为这可能是这个问题的错误 - https://urllib3.readthedocs.org/en/latest/security.html#openssl-pyopenssl 但是在更新所需的库时,我遇到了 OpenSSL.crypto 导入失败。

帮助任何人!

【问题讨论】:

  • 我不知道是什么问题。你不应该使用pyopenssl,所以这不应该是问题。尝试将 raise e 替换为 raise,这样您至少可以看到完整的错误回溯,然后更新您的问题并在此处回复我。
  • @agf 更改了回溯。现在请检查
  • 这似乎是您本地权限的问题。如果您以超级用户身份运行,您是否仍然遇到问题?此外,如果您切换 GAE_USE_SOCKETS_HTTPLIB 的值会发生什么(有关更多信息,请参阅 Braintre-python-appengine 存储库中的自述文件)?
  • 你找到解决这个问题的方法了吗?
  • @agf 是的,我不得不破解 Braintree 库。我会提供结果作为答案。

标签: python-2.7 google-app-engine braintree


【解决方案1】:

看起来 Braintree 正在尝试使用 GAE 不支持的套接字选项,您可以在此处查看支持的选项列表 https://cloud.google.com/appengine/docs/python/sockets/,其中还指出尝试获取不受支持的选项会引发错误

【讨论】:

  • Braintree 没有直接设置任何套接字选项,尽管 requestsurllib3 是可能的。由于这种方法直到最近才有效,我怀疑这是问题所在。
【解决方案2】:

Braintree 版本 - 3.20.0 请求版本 - 2.7.0

在我朋友的帮助下,我使用了以下 hack - 在 braintree/util/http.py 方法中 - __http_do

    from google.appengine.api import urlfetch
    .....
    .....
    try:
        if http_verb in ["POST", "PUT"]:
            result = urlfetch.fetch(url=full_path,
                    payload=request_body,
                    method=urlfetch.POST,
                    headers=self.__headers())
            logging.debug('result: %r' % result)
            status = result.status_code
            response_body = result.content
            logging.debug(result.content)
        else:
            status, response_body = http_strategy.http_do(http_verb, full_path, self.__headers(), request_body)
    except Exception as e:
       .....
       .....

使用这个 hack,我能够让事情正常进行。希望这可以帮助遇到同样问题的任何人。

【讨论】:

  • 这确实不是解决问题的正确方法。如果你想直接使用 urlfetch api,你应该编写一个 http 策略(基本上是一个带有 http_do 方法的对象)并在配置中设置它。但是 Braintree 库绝对可以在 GAE 上使用正确版本的请求(请参阅您在问题中链接的示例)未经修改地工作,因此您根本不应该这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2021-09-23
  • 2014-09-07
  • 1970-01-01
  • 2019-07-10
相关资源
最近更新 更多