Index > GAEとAppletの組み合わせ、Appletのセキュリティ制限を回避するために urlfetch を使って...
Wed, September 23, 2009

GAEとAppletの組み合わせ、Appletのセキュリティ制限を回避するために urlfetch を使って...

Appletはセキュリティ上の制約から、 配信元ホスト以外とはネットワーク接続を確立できないため、Appletから外部のサーバにあるリソース (たとえば画像)をロードしようとしても失敗する。

そこで、この制約を回避するための一つの方法は、 配信元ホストを経由して外部サーバのリソースを取得すること。

GoogleAppEngine上で作動させていた場合に、GoogleAppEngineに 外部サーバリソース取得させて結果をそのままAppletに転送するコードを書くにはどうしたらいいか、という話。

コード

urlfetch を使えば簡単に実現できた。 (とりあえず画像リソースを転送するだけならば)

urlfetchの概要urlfetchして得られたオブジェクトの内容 についてはGoogleAppEngineのそれぞれのページを参照のこと。

from google.appengine.ext import webapp

class TransferPage(webapp.RequestHandler):

    def get(self): 
        url = cgi.escape(self.request.get('url'))

        if url :
            r=urlfetch.fetch(url)
            self.response.headers['Content-Type'] = r.headers['Content-Type']
            self.response.out.write( r.content )

            #print r.headers.keys()
            #print 'Content-Type: '+ r.headers['Content-Type']
            #print r.content

application = webapp.WSGIApplication([('/transfer', TransferPage)],debug=True)

def main(): 
    run_wsgi_app(application)

if __name__ == "__main__": 
    main()

作動テスト

テスト環境では、ブラウザのURL欄に以下を入力して試す。

http://localhost:8080/transfer?url=http://foobar.net/foobar.png
 Twitter
follow me on Twitter
 Categories