gpt4 book ai didi

python - 使用 boto 从 Google App Engine 连接到 Route53 API

转载 作者:行者123 更新时间:2023-12-01 05:24:57 25 4
gpt4 key购买 nike

我收到以下消息:

2014-02-04 09:55:10.515 encountered error exception, reconnecting
2014-02-04 09:55:10.515 establishing HTTPS connection: host=route53.amazonaws.com, kwargs={'port': 443, 'timeout': 70}

它继续重试一段时间,然后我看到错误:

error: An error occured while connecting to the server: Unable to fetch URL: http://route53.amazonaws.com/2012-02-29/hostedzone Error: [Errno 61] Connection refused

这是使用 python boto 2.24.0,我在本地使用 SDK 以及部署在 GAE 上进行了测试。

我使用的代码中断于:

zone = conn.get_zone("myzonename.com.")

事情一定很简单。我尝试返回并使用旧版本的 boto 来看看它是否是回归,但没有这样的运气。AWS 凭证在 app.yaml 中定义为环境变量。 SSL 库也可以使用以下方式启用:

- name: ssl
version: latest

如果我直接在 Python 中运行代码而不使用 App Engine SDK,则一切正常。但是当 HTTP 请求通过 URLFetch API 时,似乎出现了问题。

最佳答案

这似乎与“google/appengine/dist27/gae_override”中的 Google httplib 有关。请注意,它表示无法连接到 http://route53.amazonaws.com。

Google 的 HTTPConnection 类将 _protocol 定义为“http”,并将在 getresponse() 中使用它,除非 _url 以该协议(protocol)开头。在我的测试中,_url只是主机之后的路径,因此Google的httplib使用HTTP而不是HTTPS,这是亚马逊拒绝的。数据包跟踪证实了这一点。

如何让它与 Google 的 httplib 一起工作的问题仍然存在。当我了解更多信息时,我会更新此内容,但这至少是一个开始。

编辑:请求会删除除adapters.py/HTTPAdapter/request_url 中的路径以外的所有内容,表示除非使用代理,否则我们应该使用它。我不知道为什么会这样,但我不熟悉请求。 (编辑:哦,因为它是在 HTTP 请求中。得。)

编辑2:(一旦我弄清楚了这一点,就会清理它。现在的意识流。)连接正在创建为HTTPSConnection,但由于某种原因_protocol保持设置为“http”。

编辑3:在Requests的connection.py中,HTTPSConnection继承自HTTPConnection,HTTPConnection继承自Google的HTTPConnection。 Google 的 httplib 中的 HTTPSConnection 从未被使用过。

编辑4:Python的标准httplib使用self.connect()来定义self.sock(),这是它用来向服务器发送数据的方法。请求重写其连接类中的这些方法。 Google 的 httplib 使用 urlfetch 在 getresponse() 中执行实际的数据发送。这似乎使其与请求的工作方式从根本上不兼容。

不知道如何解决这个问题。 Request 的 HTTPSConnection 类中的多重继承?手动设置 _protocol 以与 GAE 一起使用?没有想到什么特别漂亮的事情。

关于python - 使用 boto 从 Google App Engine 连接到 Route53 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21556587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com