5

Racket で POST/GET パラメータを取得する組み込みの方法はありますか? extract-binding友達は私のやりたいことをやってくれますが、ファイルのアップロードに関連する潜在的なセキュリティ リスクについての悲惨なメモが添付されています。

したがって、使用しないことをお勧めしますが、古いコードとの互換性のために提供されています。

私が把握できる最善のことは(事前に許してください)

(bytes->string/utf-8 (binding:form-value (bindings-assq (string->bytes/utf-8 "[field_name_here]") (request-bindings/raw req))))

しかし、それは不必要に複雑に思えます (そして、バインディング セクションに記載されているのと同じバグのいくつかに悩まされるようです)。

フィールド名とリクエストを指定して、POST/GET 変数の値を取得するための多かれ少なかれ標準的でバグのない方法はありますか? それとも、リスト/ハッシュ/リストとして POST/GET 値のコレクションを取得する方法ですか? それらのいずれかを除いて、GETを無視してPOST変数に対してのみ同じことを行う関数はありますか?

4

1 に答える 1

3

抽出バインディングは、大文字と小文字が区別されず、複数回返される入力が非常に面倒で、ファイルのアップロードを処理する方法がなく、すべてが UTF-8 であると自動的に想定するため、不適切です。これは必ずしも正しくありません。それらの問題を受け入れることができる場合は、気軽に使用してください。

作成したスニペットは、データが UTF-8 で、フィールドが 1 つしかない場合に機能します。関数であると定義して、何度も書くことを避けることができます。

一般に、フォームとその値を処理するには、フォームレットを使用することをお勧めします。

今、あなたの質問...

「フィールド名とリクエストを指定して、POST/GET 変数の値を取得するための多かれ少なかれ標準的でバグのない方法はありますか?」

あなたが持っているのは標準的なものですが、値が 1 つしかないと誤って想定しています。複数ある場合は、フィールド名でバインディングをフィルター処理する必要があります。同様に、値を文字列に変換する必要はありません。バイトのままにしておくことができます。

「もっと良いのは、POST/GET 値のコレクションをリスト/ハッシュ/リストとして取得する方法ですか?」

それが request-bindings/raw の機能です。バインディングのリストですか?オブジェクト。複数の値が返されるため、ハッシュに変換しても意味がありません。

「それらのいずれかを除いて、同じことを行う関数がありますが、POST 変数に対してのみ、GET を無視しますか?」

Web サーバーは、POST と GET の違いを隠します。URI と生の投稿データを調べて復元できますが、自分で解析する必要があります。お勧めしません。

ジェイ

于 2010-06-22T22:33:01.957 に答える