使用原始HTTP(Putty)通过POST发送文件

时间:2011-09-26 09:17:09

标签: http post putty

如果我使用以下格式设置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脚本处理它。

出于测试目的,我需要通过Putty会话使用原始HTTP来做同样的事情。

我可以这样做正常的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 个答案:

答案 0 :(得分:14)

您必须使用multipart内容类型并将文件数据编码为十六进制/二进制

在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值。

答案 1 :(得分:3)

使用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是一次性活动。之后您可以随时发送保存的请求。请注意,您应该在已保存的txt中编辑Host:标题。