2015-04-19 8 views
7

Ich versuche, eine HTTP-POST-Anfrage mit ab zu einem Formular mit Django gebaut.Machen Sie eine POST-Anfrage mit ab (Apache Benchmarking) auf einem Django-Server

Ich verwende die folgende Zeile:

ab -n 10 -C csrftoken=my_token -p ab_file.data -T application/x-www-form-urlencoded http://localhost:8000/ 

Meine ab_file.data wie folgt aussieht:

url=my_encoded_url&csrfmiddlewaretoken=my_token 

Es gibt immer einen 403 Statuscode.

Wenn ich curl benutze die gleichen Parameter, funktioniert es. Die Lockenlinie:

curl -X POST -d "url=my_encoded_url&csrfmiddlewaretoken=my_token" --cookie "csrftoken=my_token" http://localhost:8000/ 

Wie kann ich das tun?

Antwort

2

@ jacobm654321,

sicher, das Beste, was zu tun ist, die URL programmgesteuert zu codieren. Aber mein Problem war nicht das. Mein Problem ist, dass die Datei mit den Post-Daten eine leere Zeile am Ende der Datei hatte. EditorConfig legte es dort hin. Nach dem Entfernen dieser Leerzeile hat alles gut funktioniert.

Danke trotzdem.

+2

Für vim-Benutzer, 'vi postFile',': set binary noeol', ': wq', um das Ende der Zeile ('\ n') zu entfernen; – btpka3

+0

@ btpka3 Vielen Dank! Triff das gleiche Problem! – Ninja

8

Die Datei muss über korrekte url-codierte Daten verfügen. Wenn Sie manuell URL-Encodieren, ist es zu einfach, Tippfehler wie Leerzeichen falsch codieren zu lassen. Am besten programmgesteuert. Siehe eine andere Antwort: Apache Bench and POST data , wie Python zu verwenden, solche Datei zu erstellen (zB: post.data)

Dann nutzen: ab -T 'application/x-www-form-urlencoded' -n 10 -p post.data http://localhost:8080/

+0

Hallo, ist es möglich, Post-Daten innerhalb des Befehls anstelle der Datei genau wie in curl zu spezifizieren? –

1

Wenn Sie ab verwenden, muss der gesamte Inhalt der Datendatei in eine einzige Zeile eingeschlossen werden - es schlägt im Hintergrund fehl, wenn JSON normalerweise erweitert wird. Ein Post aus einer Datendatei, die gut mit curl funktioniert, wird also mit ab scheitern, bis Sie dies tun.

Tipp: Wenn Sie den Atom-Editor verwenden, wählen Sie alle aus und drücken Sie Cmd-J, um alles in eine Zeile zu schreiben.