J'essaie de faire une requête HTTP POST en utilisant ab vers un formulaire construit avec Django.
J'utilise la ligne suivante:
ab -n 10 -C csrftoken=my_token -p ab_file.data -T application/x-www-form-urlencoded http://localhost:8000/
Ma ab_file.data
ressemble à ça:
url=my_encoded_url&csrfmiddlewaretoken=my_token
Il renvoie toujours un 403
code d'état.
Lorsque j'utilise curl
en utilisant les mêmes paramètres, cela fonctionne. La ligne de curl:
curl -X POST -d "url=my_encoded_url&csrfmiddlewaretoken=my_token" --cookie "csrftoken=my_token" http://localhost:8000/
Comment puis je faire ça?
@ jacobm654321,
pour sûr, la meilleure chose à faire est de coder l'URL par programmation. Mais mon problème n'était pas ça. Mon problème est que le fichier contenant les données de publication avait une ligne vierge à la fin du fichier. EditorConfig l'a mis là. Après avoir supprimé cette ligne vierge, tout a bien fonctionné.
Merci quand même.
Le fichier doit avoir des données correctement encodées en url. Si vous encodez l'URL manuellement, il est trop facile d'avoir des fautes de frappe comme des blancs mal encodés. Il vaut mieux le faire par programme. Voir une autre réponse: Apache Bench et POST data sur la façon d'utiliser Python pour créer un tel fichier (ex: post.data )
Utilisez ensuite: ab -T 'application/x-www-form-urlencoded' -n 10 -p post.data http://localhost:8080/
Lorsque vous utilisez ab, tout le contenu du fichier de données doit être encapsulé sur une seule ligne - il échoue silencieusement s'il est normalement développé JSON. Ainsi, une publication à partir d'un fichier de données qui fonctionne correctement avec curl échouera avec ab jusqu'à ce que vous le fassiez.
Astuce: Si vous utilisez Atom ou VSCode, sélectionnez tout et appuyez sur Cmd-J pour tout mettre sur une seule ligne.