認証された Google App Engine サービスに (非ウェブ) Python クライアントからアクセスするにはどうすればよいでしょうか? 質問する

認証された Google App Engine サービスに (非ウェブ) Python クライアントからアクセスするにはどうすればよいでしょうか? 質問する

Google App Engine アプリを持っています -翻訳: 翻訳者: 渡辺 剛志ページがあります - mylovelypage

今のところ、このページはself.response.out.write('OK')

自分のコンピューターで次の Python を実行するとします。

import urllib2
f = urllib2.urlopen("http://mylovelyapp.appspot.com/mylovelypage")
s = f.read()
print s
f.close()

「OK」と表示されます

問題は、login:requiredアプリのyamlにこのページを追加すると

すると、GoogleアカウントのログインページのHTMLが出力されます。

私は「通常の」認証方法を試しました。例:

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()

auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(None,
                          uri='http://mylovelyapp.appspot.com/mylovelypage',
                          user='[email protected]',
                          passwd='billybobspasswd')
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)

しかし、違いはありません。ログイン ページの HTML が返されます。

私はもう試したGoogle の ClientLogin 認証 APIですが、動作させることができません。

h = httplib2.Http()

auth_uri = 'https://www.google.com/accounts/ClientLogin'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
myrequest = "Email=%s&Passwd=%s&service=ah&source=DALELANE-0.0" % ("[email protected]", "billybobspassword")
response, content = h.request(auth_uri, 'POST', body=myrequest, headers=headers)

if response['status'] == '200':
    authtok = re.search('Auth=(\S*)', content).group(1)

    headers = {}
    headers['Authorization'] = 'GoogleLogin auth=%s' % authtok.strip()
    headers['Content-Length'] = '0'

    response, content = h.request("http://mylovelyapp.appspot.com/mylovelypage", 
                                  'POST', 
                                  body="", 
                                  headers=headers)

    while response['status'] == "302":        
        response, content = h.request(response['location'], 'POST', body="", headers=headers) 

    print content

トークンは正しく取得できるようですが、「mylovelypage」を呼び出すときにヘッダーでそれを使用しようとすると、ログイン ページの HTML が返されるだけです。:-(

誰か助けてくれませんか?

使えますか?GData クライアント ライブラリこのようなことをするにはどうすればいいでしょうか? 私が読んだところによると、App Engine アプリにアクセスできるはずだと私は思いますが、App Engine の認証を機能させることにはまだ成功していません。

始めるにあたって、サンプル、記事、あるいは検索すべきキーワードなどについてのご指摘をいただければ幸いです。

ありがとう!

ベストアンサー1

App Engine にデータをアップロードするツールである appcfg.py は、App Engine サーバーで認証するためにまさにこれを実行する必要があります。関連する機能は appengine_rpc.py に抽象化されています。簡単に言えば、解決策は次のとおりです。

  1. 使用Google クライアントログイン API認証トークンを取得します。appengine_rpc.pyはこれを実行します_GetAuthToken
  2. 認証トークンをApp Engineアプリの特別なURLに送信します。そのページはCookieと302リダイレクトを返します。リダイレクトを無視してCookieを保存します。appcfg.pyはこれを実行します。_GetAuthCookie
  3. 返された Cookie を今後のすべてのリクエストで使用します。

こちらもご覧ください_認証するappcfgがClientLoginからのさまざまな戻りコードをどのように処理するかを確認します。_GetOpener、appcfg が HTTP リダイレクトに従わない urllib2 OpenerDirector を作成する方法を確認してください。または、実際には、AbstractRpcServer クラスと HttpRpcServer クラスをそのまま使用することもできます。必要なことはほぼすべて実行できるからです。

おすすめ記事