跳到主要内容

request 模拟post提交表单

· 阅读需 2 分钟
一介布衣
全栈开发者

node.js环境下,利用request 模拟post提交表单

需要 formstream 插件配合使用.

npm install request formstream

var request = require('request')
, FormStream = require('formstream')

var form = FormStream()
.field('name', '一介布衣')
.file('head_image', '100x100.png')

var upload = request.post('http://yijiebuyi.com/page', {
headers: form.headers()
}, function (err, res, rtn) {
//...返回状态处理
})

form.pipe(upload)

将form 表单信息转化成formstream 流,然后将此流 pipe 到 request 的post 流上.

这种写法最适合什么场景

它特别适合那些你需要在服务端模拟浏览器提交 multipart/form-data 的情况,比如:

  • 自动上传图片
  • 模拟表单接口联调
  • 做中间服务转发文件

也就是说,重点不是“post 请求本身”,而是如何把普通字段和文件字段一起组织成服务端能识别的表单流。

为什么这里会用到流

因为文件上传不是简单的 JSON 提交。把表单转成流再 pipe 到请求对象上,本质上是在按更接近真实上传过程的方式把数据送出去。这也是 Node.js 处理文件类场景时非常常见的思路:一旦涉及大块数据或文件,流往往比一次性拼接内存对象更自然。