Отправка файла через POST с использованием необработанного HTTP (Putty) - PullRequest
8 голосов
/ 26 сентября 2011

Если я настроил HTML-страницу со следующей формой:

<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>

Я могу загрузить файл в upload_file.php, где я могу обработать его с помощью php-скрипта.

В целях тестирования мне нужно сделать то же самое, используя необработанный HTTP через сеанс Putty.

Я могу сделать обычный POST (просто отправив текстовые данные) следующим образом:

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

Как я могу отправить файл таким способом?

Ответы [ 2 ]

14 голосов
/ 26 сентября 2011

Вы должны использовать multipart content-type и кодировать данные файла в шестнадцатеричный / двоичный

Попробуйте следующее в 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--

Помните, что необходим дополнительный символ новой строки между именем поля и его данными. Также обновите значение Content-Length.

3 голосов
/ 26 сентября 2011

Откройте порт с помощью netcat и сохраните входящий запрос:

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

Затем измените форму, чтобы отправить данные в netcat:

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

Отправьте форму из вашего браузера. Вы можете найти полный необработанный запрос с содержимым файла в файле income-http.txt.

Сохранение income-http.txt является одноразовым действием. Позже вы можете отправить сохраненный запрос в любое время. Обратите внимание, что вы должны отредактировать заголовок Host: в сохраненном тексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...