Djangoで構築されたフォームにHTTP POST ab を使用してリクエストを送信しようとしています。
次の行を使用しています。
ab -n 10 -C csrftoken=my_token -p ab_file.data -T application/x-www-form-urlencoded http://localhost:8000/
私のab_file.data
は次のようになります:
url=my_encoded_url&csrfmiddlewaretoken=my_token
常に403
ステータスコードを返します。
同じパラメーターを使用してcurl
を使用すると、機能します。カールライン:
curl -X POST -d "url=my_encoded_url&csrfmiddlewaretoken=my_token" --cookie "csrftoken=my_token" http://localhost:8000/
どうやってやるの?
@ jacobm654321、
確かに、最善の方法は、URLをプログラムでエンコードすることです。しかし、私の問題はそれではありませんでした。私の問題は、投稿データを含むファイルのファイルの最後に空白行があったことです。 EditorConfigはそれを配置します。その空白行を削除した後、すべてがうまくいきました。
とにかくありがとう。
ファイルには適切なURLエンコードデータが必要です。手動でurl-encodeを行うと、空白のような誤ったエンコードのようなタイプミスが発生しやすくなります。プログラムで行うのが最善です。別の回答を参照してください: Apache BenchおよびPOST data を使用してPythonを使用してそのようなファイルを作成する方法(例:post.data )
次に、ab -T 'application/x-www-form-urlencoded' -n 10 -p post.data http://localhost:8080/
Abを使用する場合、データファイルの内容全体を1行にラップする必要があります。通常、JSONが展開されている場合は、警告なしで失敗します。したがって、curlで正常に機能するデータファイルからの投稿は、これを行うまでabで失敗します。
ヒント:AtomまたはVSCodeを使用している場合は、すべてを選択してCmd-Jを押し、すべてを1行にラップします。