2011-09-26 7 views
8

Gdybym utwórz stronę HTML w następującej postaci:Wysyłanie pliku za pośrednictwem POST przy użyciu surowego HTTP (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> 

mogę przesłać plik do upload_file.php gdzie mogę obsługiwać go za pomocą php scenariusz.

Do celów testowych muszę zrobić to samo, używając surowego protokołu HTTP za pośrednictwem sesji Putty.

mogę zrobić zwykłą pocztą (tylko wysyłanie danych tekstowych) w ten sposób:

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 

Jak mogę wysłać plik w ten sposób?

Odpowiedz

14

Musisz użyć multipart typ zawartości i kodowania danych pliku do hex/binarnego

Spróbuj wykonać następujące czynności w 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-- 

Pamiętaj, że dodatkowy znak nowej linii jest konieczne między nazwy pola i jego dane. Zaktualizuj także wartość Content-Length.

+0

Jak mogę dostosować plik do nowej długości treści? Czy będzie to rozmiar pliku w bajtach? – xbonez

+1

Ukończyłem nieprzetworzone dane w mojej odpowiedzi. Zawiera teraz ładunek pliku tekstowego. Długość-zawartości będzie całkowitym rozmiarem ładunku (włączając w to plik) w bajtach. –

+0

Długość zawartości to rozmiar w bajtach danych wysyłanych od pierwszej "granicy" do ostatniej. –

4

otworzyć port z netcata i zapisać żądania przychodzące:

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

Następnie zmodyfikować formularz, aby wysłać dane do netcata:

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

Wyślij formularz z przeglądarki. Pełne, nieprzetworzone żądanie można znaleźć z zawartością pliku w pliku income-http.txt.

Zapisywanie income-http.txt jest jednorazową operacją. Później możesz wysłać zapisane żądanie w dowolnym momencie. Należy pamiętać, że należy edytować nagłówek Host: w zapisanym txt.

+0

Bardzo podoba mi się pomysł, że mogę przeanalizować przychodzące zapytanie. Ale niestety otwarcie portu nie jest dla mnie opcją. Czy jest jakaś alternatywa? – xbonez

+1

Musisz zrobić to tylko na lokalnym komputerze i tylko raz. Po uzyskaniu dochodu-http.txt możesz go wysłać w dowolnym momencie. – palacsint

+0

Och, masz na myśli, że otwieram port na lokalnym komputerze i nie muszę go przesyłać dalej na routerze? Nie mam dostępu do routera. Daję netcatowi strzał. – xbonez