Request简化的HTTP客户端Forms学习

2019-08-22118次阅读node

request支持application/x-www-form-urlencoded和multipart/form-data表单form上传。有关multipart/related信息,请参阅下方的multipart API。

application/x-www-form-urlencoded (URL-Encoded Forms)

request.post('http://service.com/upload').form({key:'value'})
// or
request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ })

multipart/form-data (Multipart Form Uploads)

对于多部分/表单数据,我们使用@felixge提供的表单数据库。在大多数情况下,您可以通过FormData选项传递上载表单数据。

const formData = {
  // 传递一个简单的键值对
  my_field: 'my_value',
  // 通过Buffers缓冲区传递数据
  my_buffer: Buffer.from([1, 2, 3]),
  // 通过Streams流传递数据
  my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
  // 通过数组传递多个值
  attachments: [
    fs.createReadStream(__dirname + '/attachment1.jpg'),
    fs.createReadStream(__dirname + '/attachment2.jpg')
  ],
  // 传递带有“options”对象的可选元数据{value: DATA, options: OPTIONS}
  // 用例:对于某些类型的流,您需要手动提供“file”相关的信息。
  // 有关`form-data`详细信息,请参阅https://github.com/form-data/form-data
  custom_file: {
    value:  fs.createReadStream('/dev/urandom'),
    options: {
      filename: 'topsecret.jpg',
      contentType: 'image/jpeg'
    }
  }
};
request.post({url:'http://service.com/upload', formData: formData}, function optionalCallback(err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err);
  }
  console.log('Upload successful!  Server responded with:', body);
});

也可以通过r.form()访问表单数据对象本身。这可以修改,直到在事件循环的下一个循环上触发请求。(请注意,此调用form()将清除该请求当前设置的表单数据。)

//注意:高级用例,正常使用请参见上面的“formdata”用法。
const r = request.post('http://service.com/upload', function optionalCallback(err, httpResponse, body) {...})
const form = r.form();
form.append('my_field', 'my_value');
form.append('my_buffer', Buffer.from([1, 2, 3]));
form.append('custom_file', fs.createReadStream(__dirname + '/unicycle.jpg'), {filename: 'unicycle.jpg'});

multipart/related

不同HTTP实现中的某些变体要求在multipart/related请求边界前后(使用multipart选项)使用换行符/CRLF 。这已在.NET WebAPI 4.0版中观察到。您可以通过将它们传递true给您的请求选项来打开边界前置CRLF或后置CRLF。

request({
    method: 'PUT',
    preambleCRLF: true,
    postambleCRLF: true,
    uri: 'http://service.com/upload',
    multipart: [
      {
        'content-type': 'application/json',
        body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})
      },
      { body: 'I am an attachment' },
      { body: fs.createReadStream('image.png') }
    ],
    //或者传递包含其他options选项的对象
    multipart: {
      chunked: false,
      data: [
        {
          'content-type': 'application/json',
          body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})
        },
        { body: 'I am an attachment' }
      ]
    }
  },
  function (error, response, body) {
    if (error) {
      return console.error('upload failed:', error);
    }
    console.log('Upload successful!  Server responded with:', body);
  })

 

上一篇: Request简化的HTTP客户端Streaming流学习  下一篇: Request中Error: options.uri is a required argument  

Request简化的HTTP客户端Forms学习相关文章