2011-09-26 14 views
8

Se ho creato una pagina html con il seguente modulo:Invio di un file tramite POST utilizzando HTTP grezzo (Putty)

<html> 
<body> 

<form action="upload_file.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 

</body> 
</html> 

posso caricare un file upload_file.php dove posso gestire la cosa con un php script.

Per scopi di test, ho bisogno di fare lo stesso utilizzando HTTP non elaborato tramite una sessione Putty.

posso fare un post normale (solo l'invio di dati di testo) in questo modo:

POST /test_post.php HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 11 

name=myname 

Come posso inviare un file in questo modo?

risposta

14

Devi usare multipart tipo di contenuto e codificare i dati del file in esadecimale/binario

Prova quanto segue in telnet:

POST /the_url HTTP/1.1 
User-Agent: Mozilla 
Host: www.example.com 
Content-Length: xxxx 
Content-Type: multipart/form-data; boundary=--------------------31063722920652 
------------------------------31063722920652 
Content-Disposition: form-data; name="a" 

value_for_a 
------------------------------31063722920652 
Content-Disposition: form-data; name="b" 

value_for_b 
------------------------------31063722920652 
Content-Disposition: form-data; name="c"; filename="myfile.txt" 
Content-Type: text/plain 

      This is a test 
      and more 

-----------------------------31063722920652 
Content-Disposition: form-data; name="submit" 

Submit 
-----------------------------31063722920652-- 

Ricordate che un ritorno a capo in più è necessario tra il nome del campo e la sua dati. Inoltre, aggiorna il valore Content-Length.

+0

Come posso ospitare il file nella nuova lunghezza del contenuto? Sarà la dimensione del file in byte? – xbonez

+1

Ho completato i dati grezzi nella mia risposta. Ora contiene un payload del file di testo. Content-Length sarà la dimensione completa del payload (incluso il file) in byte –

+0

Content-Length è la dimensione in byte di dati che viene inviata a partire dal primo 'limite 'fino all'ultimo. –

4

aprire una porta con netcat e salvare la richiesta in ingresso:

nc -l -p 1090 > income-http.txt 

quindi modificare il modulo per inviare i dati al netcat:

<form action="http://localhost:1090/upload_file.php" 
    method="post" enctype="multipart/form-data"> 

inviare il modulo dal browser. È possibile trovare la richiesta completa completa con i contenuti del file nel file income-http.txt.

Il salvataggio di income-http.txt è un'attività singola. Successivamente è possibile inviare la richiesta salvata in qualsiasi momento. Si noti che è necessario modificare l'intestazione Host: nel txt salvato.

+0

Mi piace molto l'idea di poter analizzare la richiesta in arrivo. Ma sfortunatamente, aprire una porta non è un'opzione per me. C'è qualche alternativa a questo? – xbonez

+1

Devi farlo solo sul tuo computer locale e solo una volta. Dopo aver ottenuto il reddito, http.txt puoi inviarlo tutte le volte. – palacsint

+0

Oh, vuoi dire che apro la porta sulla macchina locale e non devo inoltrarla al router? Non ho accesso al router. Darò un colpo a netcat. – xbonez

Problemi correlati