On this page |
Note
このクラスは、hou.WebServerRequest
とhou.webServer.Request
のどちらを使用してもアクセス可能ですが、
hou.webServer.Request
を使用する方が望ましいです。
このオブジェクトは、クライアントリクエストからの情報用のコンテナとして登録済みのURLハンドラー関数に渡されます。
-
URL引数の辞書を取得するには、
request.GET()
をコールします。 -
(POSTリクエスト内の)フォーム引数の辞書を取得するには、
request.POST()
をコールします。 -
リクエストのフルパスを取得するには、
request.path()
をコールします。 -
リクエストがファイルアップロードの場合、
request.files()
を使用することで、ファイル名とファイルの内容がマッピングされた辞書を取得することができます。
アップロードのサンプル ¶
import tempfile import hou @hou.webServer.urlHandler("/blur_image") def blur_image(request): if request.method() == "GET": return hou.webServer.Response(''' <p>Upload an image</p> <form method="POST" enctype="multipart/form-data"> <input type="file" name="image_file"> <input type="submit"> </form> ''') if request.method() != "POST": return hou.webServer.notFoundResponse(request) image_file = request.files().get("image_file") if image_file is None: return hou.webServer.errorResponse(request, "No image was posted", 422) image_file.saveToDisk() # COPネットワークを使用して、画像を読み込んで、その画像にブラーをかけて、それを一時出力ファイルに書き出します。 cop2net = hou.node("/img").createNode("img") file_cop = cop2net.createNode("file") file_cop.parm("filename1").set(image_file.temporaryFilePath()) blur_cop = cop2net.createNode("blur") blur_cop.setFirstInput(file_cop) blur_cop.parm("blursize").set(10) rop = cop2net.createNode("rop_comp") rop.setFirstInput(blur_cop) rop.parmTuple("f").set((1, 1, 1)) temp_output_file = tempfile.mkstemp(".jpg")[1] rop.parm("copoutput").set(temp_output_file) rop.render() cop2net.destroy() return hou.webServer.fileResponse(temp_output_file, delete_file=True) hou.webServer.run(8008, True)
メソッド ¶
method()
→ str
リクエストで使用されているHTTPメソッド(例えば、"GET"
, "POST"
, "PATCH"
など)を返します。
path()
→ str
サーバーにリクエストされたパスを返します。
例えば、URIが"http://127.0.0.1:8008/asset/torus?divisions=20&tx=2"
の場合、そのパスは"/asset/torus"
となります。
pathWithQueryString()
→ str
サーバーにリクエストされた(照会文字列の部分を含んだ)パスを返します。
例えば、URIが"http://127.0.0.1:8008/asset/torus?divisions=20&tx=2"
の場合、その結果は"/asset/torus?divisions=20&tx=2"
となります。
Note
このサンプルでの照会文字列の内容は、request.GET()["divisions"]
やrequest.GET()["tx"]
を介してアクセスすることも可能です。
queryString()
→ str
リクエストの(先頭の?
を除外した)照会文字列を返します。
例えば、URIが"http://127.0.0.1:8008/asset/torus?divisions=20&tx=2"
の場合、その結果は"divisions=20&tx=2"
となります。
URIが"http://127.0.0.1:8008/asset/torus"
の場合、その結果は""
となります。
absoluteURI(location=None)
→ str
location
がNone
の場合、現在のリクエストの送信に使用されたフルURIを返します。
それ以外の場合、location
にサーバー上のパスを含んだ文字列を指定すると、そのパスのフルURIを返します。
このメソッドは、hou.webServer.redirectのLocation
ヘッダの構築に使用します。
isSecure()
→ bool
httpの代わりにhttpsを使用してリクエストが送信されていればTrue
を返します。
headers()
→ dict
of str
to str
リクエストと一緒に用意されたヘッダの辞書を返します。
このメソッドはコールする度に辞書の新しいコピーを生成するので、必要以上にコールしないことを推奨します。
Note
cookiesメソッドは、Cookie
ヘッダの内容を解析します。
Webサーバーは認証に対応していませんが、例えば、Authorization
ヘッダの内容を検査するデコレータを作成することで認証を追加することができます。
cookies()
→ dict
of str
to str
リクエストで送信されたCookie
ヘッダから解析されたクッキーデータを返します。
このメソッドはコールする度に辞書の新しいコピーを生成するので、必要以上にコールしないことを推奨します。
GET()
→ dict
of str
to str
リクエストのURLに用意されている解析済みの照会文字列変数の辞書を返します。
このメソッドはコールする度に辞書の新しいコピーを生成するので、必要以上にコールしないことを推奨します。
同じキーに複数のGET値を対応させたいのであれば、Pythonのparse_qs
関数を使用して照会文字列を解析し、そこから複数のGET値を抽出すると良いでしょう。
try: from urllib.parse import parse_qs except Importerror: from urlparse import parse_qs `parse_qs(request.queryString())`
POST()
→ dict
of str
to str
リクエストのボディ内に用意されている解析済みの照会変数の辞書を返します。
サーバーは、URLエンコードされた値とmultipart/form-data
エンコードされた値を受信することができます。
このメソッドはコールする度に辞書の新しいコピーを生成するので、必要以上にコールしないことを推奨します。
Note
multipart/form-data
形式のデータ内のファイルは、この辞書には含まれず、代わりにfilesメソッドを介してアクセスすることができます。
files()
→ dict
of str
to hou.webServer.UploadedFile
multipart/form-data
形式のデータで渡されたファイルアップロードの辞書を返します。
これらのファイルアップロードのサイズが大きいのであれば、メモリに保存するよりもディスクに保存した方が良いです。
詳細は、hou.webServer.UploadedFileを参照してください。
このメソッドはコールする度に辞書の新しいコピーを生成するので、必要以上にコールしないことを推奨します。
port()
→ int
リクエストの送信元のサーバーポートを返します。
body()
→ str
リクエストがまったく解析されていないままのボディを返します。
このメソッドはコールする度に辞書の新しいコピーを生成するので、必要以上にコールしないことを推奨します。
contentLength()
→ str
Content-Lengthヘッダを返します。 Content-Lengthヘッダが存在しなかった場合は、空っぽの文字列が返されます。 これは、直接Content-Lengthヘッダを調べるための便利メソッドとして用意されています。
contentType()
→ str
Content-Typeヘッダを返します。 Content-Typeヘッダが存在しなかった場合は、空っぽの文字列が返されます。 これは、直接Content-Typeヘッダを調べるための便利メソッドとして用意されています。
host()
→ str
リクエストのHostヘッダ内で見つかったホストを返します。 何もホストが見つからなければ、空っぽの文字列が返されます。
protocol()
→ str
リクエストに使用されたプロトコルを返します。
例えば、http1.1リクエストの場合だとHTTP/1.1
が返されます。