Che cosa dovrebbe una richiesta HTTP Multipart con più file assomiglia? [duplicare]
Domanda
Questa domanda ha già una risposta qui:
- Come funziona il caricamento di file HTTP? 5 risposte
Sto lavorando su un'applicazione per iPhone che presenta una richiesta HTTP più parti con più file di immagine.
Sembra che ciò che sta accadendo, sul lato server, è che una delle immagini è sempre analizzato correttamente, ma gli altri due file non sono.
Qualcuno può inviare una richiesta più parti di esempio HTTP che contiene più file di immagine?
Soluzione
Bene, si noti che la richiesta contiene dati binari, quindi non sto postando la richiesta in quanto tale - ( ""). Invece, ho convertito tutti i caratteri non-ascii stampabile in un punto
POST /cgi-bin/qtest HTTP/1.1
Host: aram
User-Agent: Mozilla/5.0 Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://aram/~martind/banner.htm
Content-Type: multipart/form-data; boundary=----------287032381131322
Content-Length: 514
------------287032381131322
Content-Disposition: form-data; name="datafile1"; filename="r.gif"
Content-Type: image/gif
GIF87a.............,...........D..;
------------287032381131322
Content-Disposition: form-data; name="datafile2"; filename="g.gif"
Content-Type: image/gif
GIF87a.............,...........D..;
------------287032381131322
Content-Disposition: form-data; name="datafile3"; filename="b.gif"
Content-Type: image/gif
GIF87a.............,...........D..;
------------287032381131322--
Si noti che ogni linea (compresa l'ultima che termina con "322--") termina con una sequenza \ r \ n.
Altri suggerimenti
Modifica : Sto mantenendo una simile, ma più in profondità risposta a: https: // stackoverflow.com/a/28380690/895245
Per vedere esattamente cosa sta succedendo, l'uso nc -l
e un agente utente come un browser o curl.
Salvare il modulo in un file .html
:
<form action="http://localhost:8000" method="post" enctype="multipart/form-data">
<p><input type="text" name="text" value="text default">
<p><input type="file" name="file1">
<p><input type="file" name="file2">
<p><button type="submit">Submit</button>
</form>
Crea file da caricare:
echo 'Content of a.txt.' > a.txt
echo '<!DOCTYPE html><title>Content of a.html.</title>' > a.html
Esegui:
nc -l localhost 8000
Aprire il codice HTML del browser, selezionare i file e cliccare su inviare e controllare il terminale.
stampe nc
la richiesta ricevuta. Firefox ha inviato:
POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __atuvc=34%7C7; permanent=0; _gitlab_session=226ad8a0be43681acf38c2fab9497240; __profilin=p%3Dt; request_method=GET
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------9051914041544843365972754266
Content-Length: 554
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="text"
text default
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain
Content of a.txt.
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html
<!DOCTYPE html><title>Content of a.html.</title>
-----------------------------9051914041544843365972754266--
Aternativelly, cURL deve inviare la stessa richiesta POST come una forma del browser:
nc -l localhost 8000
curl -F "text=default" -F "file1=@a.html" -F "file1=@a.txt" localhost:8000
Si può fare più test con:
while true; do printf '' | nc -l localhost 8000; done