请教下http协议里的post请求
发布于 7 个月前 作者 Kyoloro 442 次浏览 来自 问答

问题: 我想测试 formidable模块包的 form.parse,我自己用http模块写了一个http.request发送post请求,请问下如何将一个文件发过去,而不是解析里面的内容发过去,请教下这个API是哪个。

9 回复

用了web端的表单的提交方式 '<form method="post" enctype="multipart/form-data">' + '<p>File: <input type="file" name="file" /></p>' + '<p><input type="submit" value="Upload" /></p>' + '</form>' 完成了测试,请问下如果用node去模拟,该如何写呢,只会用fs解析掉,然后只能发发数据,而不是发文件

尼玛 调用fs.createReadStream 连接文件,.pipe请求发送,实现了node模拟。

直接pipe跟提交的form表单不一样吧。。 模拟form表单提交需要先写好 content-type=multipart/form-data,然后读取文件,拼凑成multipart/form-data的格式write到输出端。。 具体格式类似这种的,

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA

------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"

title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png

PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

直接pipe的话应该只包含了这一段

PNG ... content of chrome.png ...

这里有个post file的例子… https://github.com/samt/http-post

post 常见的提交数据方式

https://www.imququ.com/post/four-ways-to-post-data-in-http.html

如果用node提交multipart-form,可以用https://www.npmjs.com/package/request, 具体用法参考: https://github.com/request/request#multipartform-data-multipart-form-uploads 如果要看具体实现,可以查看https://github.com/felixge/node-form-data 因为上述的request模块关于mulitpart-form底层用的还是form-data

superagent 大法好~

http://visionmedia.github.io/superagent/#multipart-requests

var request = require('superagent');
request
	.post('/upload')
	.attach(<name>,<file path>,[file name])
	.end(function(err,res){
	});
回到顶部