2015-04-19 12 views
7

Sto provando a fare una richiesta HTTP POST usando ab a un modulo compilato con django.Effettua una richiesta POST usando ab (benchmarking di apache) su un server django

sto usando la seguente riga:

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

mio ab_file.data assomiglia a questo:

url=my_encoded_url&csrfmiddlewaretoken=my_token 

Si restituisce sempre un codice 403 di stato.

Quando utilizzo lo curl utilizzando gli stessi parametri, funziona. La linea di arricciatura:

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

Come posso farlo?

risposta

2

@ jacobm654321,

di sicuro, la cosa migliore fare è codificare l'URL a livello di programmazione. Ma il mio problema non era quello. Il mio problema è che il file contenente i dati del post aveva una riga vuota alla fine del file. EditorConfig lo ha messo lì. Dopo aver rimosso quella riga vuota, tutto ha funzionato bene.

Grazie comunque.

+2

Per gli utenti di vim, 'vi postFile',': set binary noeol', ': wq' per rimuovere la fine della riga ('\ n'); – btpka3

+0

@ btpka3 Grazie mille! Incontra lo stesso problema! – Ninja

8

Il file deve disporre di dati di codifica url appropriati. Se url-encode manualmente, è troppo facile avere errori di battitura come le codifiche errate degli spazi vuoti. Meglio farlo a livello di codice. Vedere un un'altra risposta: Apache Bench and POST data su come utilizzare Python per creare questo file (es: post.data)

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

+0

Ciao, è possibile specificare i dati del post all'interno del comando anziché il file proprio come in arricciatura? –

1

Quando si utilizza ab, l'intero contenuto del file di dati deve essere racchiuso su una singola riga: fallisce silenziosamente se è normalmente espanso JSON. Quindi un post da un file di dati che funziona bene con curl fallirà con ab fino a quando non lo farai.

Suggerimento: se si utilizza l'editor Atom, selezionare tutto e premere Cmd-J per avvolgere tutto su una riga.