如果我使用以下格式设置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
如何以这种方式发送文件?
答案 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:
标题。