Выполните запрос POST, используя ab (апач-бенчмаркинг) на сервере django
Я пытаюсь выполнить запрос HTTP POST с помощью ab в форме, построенной с помощью django.
Я использую следующую строку:
ab -n 10 -C csrftoken=my_token -p ab_file.data -T application/x-www-form-urlencoded http://localhost:8000/
My 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/
Как я могу это сделать?
Ответы
Ответ 1
@jacobm654321,
наверняка, самое лучшее, что нужно сделать, это кодировать URL программно. Но моя проблема была не в этом. Моя проблема заключается в том, что файл, содержащий данные post, имел пустую строку в конце файла. EditorConfig положил его туда. После удаления этой пустой строки все сработало.
Спасибо в любом случае.
Ответ 2
Файл должен иметь правильные данные с кодировкой url. Если вы url-encode вручную, слишком легко иметь опечатки, как пробелы, неправильные кодировки. Лучше всего делать это программно.
См. Другой ответ: Apache Bench and POST data
о том, как использовать Python для создания такого файла (например: post.data)
Затем используйте:
ab -T 'application/x-www-form-urlencoded' -n 10 -p post.data http://localhost:8080/
Ответ 3
При использовании ab все содержимое файла данных должно быть заключено в одну строку - оно молча завершается неудачей, если обычно расширяет JSON. Так что сообщение из файла данных, который отлично работает с curl, не будет работать с ab, пока вы не сделаете это.
Совет: Если вы используете Atom или VSCode, выберите все и нажмите Cmd-J, чтобы перенести все в одну строку.