AppEngine,python-oauth2和Context.IO;消费者密钥未随请求发送

时间:2012-11-25 02:12:22

标签: python google-app-engine oauth

AppEngine和Context.IO API存在一个非常奇怪的问题。

我正在使用contextIO2库,该库使用python-oauth2

当我通过终端尝试使用库(contextIO2)时,我没有遇到任何问题(或者至少还没有问题。但是我已经在几天内尝试了几十次没有问题)。

但是当在AppEngine上运行代码时, 有时 会出现401 Authorization Invalid consumer key错误。我不确定是什么导致它,因为一分钟请求就好了,然后当我再次尝试请求时,我得到401,然后一段时间后它会好的,然后不再好了,等等。

我通过电子邮件发送了Context.IO支持,他说当他尝试我的应用程序的url并得到错误时,“oauth_consumer_key似乎没有正确传输”。可能是什么导致了这个? AppEngine弄乱了请求? pythoan-oauth2 bug? contextIO2 bug?

这是我的处理程序代码之一:

class ReceiveConnectTokenHandler(webapp2.RequestHandler):
    def get(self):
        contextio_token = self.request.get('contextio_token')
        cio = ContextIO(API_KEY, API_SECRET)
        # get token's associated email
        try:
            token = cio.get_connect_token(contextio_token)
        except RequestError, e:
            if e.status_code == 404:
                self.response.write(
                    'Token %s not found. ' % contextio_token)
                return
            raise e
        account = token.account
        if not account or not account.email_addresses:
            self.response.write(
                'Token %s has no email associated with it yet.' % contextio_token)
            return
        email = account.email_addresses[0]
        # clear email's memcache
        memcache.delete_multi(['accounts', 'no_account'], namespace=email)
        self.response.write(
            '''%s is now connected with Context.IO. Please verify in the
            gadget that you have granted access. You can close this window.''' % email
        )

这只是https://api.context.io/2.0/connect_tokens/{{token}}

上的简单GET

1 个答案:

答案 0 :(得分:0)

按照格雷格的建议发布答案。

问题是contextIO2库通过以下方式定义了它的request_uri方法:

def request_uri(uri, method='GET', params={}, headers={}):

这是一个常见的Python陷阱(#5 in this list)。我已通知Context.IO支持并已发送拉取请求。