web-dev-qa-db-ja.com

POSTサーバーでab(Apacheベンチマーク)を使用してDjangoリクエストを作成します

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/

どうやってやるの?

14
hermancaldara

@ jacobm654321、

確かに、最善の方法は、URLをプログラムでエンコードすることです。しかし、私の問題はそれではありませんでした。私の問題は、投稿データを含むファイルのファイルの最後に空白行があったことです。 EditorConfigはそれを配置します。その空白行を削除した後、すべてがうまくいきました。

とにかくありがとう。

3
hermancaldara

ファイルには適切な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/

16
jacobm654321

Abを使用する場合、データファイルの内容全体を1行にラップする必要があります。通常、JSONが展開されている場合は、警告なしで失敗します。したがって、curlで正常に機能するデータファイルからの投稿は、これを行うまでabで失敗します。

ヒント:AtomまたはVSCodeを使用している場合は、すべてを選択してCmd-Jを押し、すべてを1行にラップします。

6
shacker