このページを正しく表示するにはJavascriptを有効にしてください。
AppEngine/Py + Djangoで画像プロキシを作る
AppEngine上に簡単な画像プロキシを作るときのメモ。
他サーバーで動的に作った画像をAppEngineのブログと同じドメインで配信したかったのでサクッと作ってみました。URLを渡すとAppEngine上で取得して結果をそのまま返すだけです。
Djangoをセットアップして
```
from google.appengine.api.urlfetch import fetch
from django.http import HttpResponse
def proxy(request, url):
result = fetch(url)
response=HttpResponse(result.content)
response['Content-Type'] = result.headers["Content-Type"]
return response
```
こんな感じに書けばプロキシ出来ます。ポイントとしてはAppEngine上ではurlfetchを利用する点と、Binaryをレスポンスとして返す場合は自分でResponseオブジェクトを作って返す点です。ヘッダーとかもうちょっとコピーしたいという場合はresult.headersの辞書から適当に引っ張ってください。
あと実際に使う際はセキュリティ的に問題がある(攻撃の踏み台として使われたりする)ので、受け取ったURLをすべて許可せずドメイン・パラメータのチェックをしたり、ログインを必須にして他人に使わせないなどの対策をとりましょう。
もう一個、問題点としてはレスポンスが結構遅いです。AppEngineはデータセンターが遠いので往復に時間がかかりますし(httpingで500ms前後)、一旦コンテンツをAppEngine上で取得完了してからレスポンスを返し始めるのでやたら待たされます。その上取得の待ち時間もCPUリソースとして消費するので…。かなり使い所が限られてきますね。