使用请求模块在Node.js中发送URL编码的参数

Send URL-encoded parameters in Node.js using request module

我正在尝试使用带有request模块的PasteBin API创建一个新的粘贴,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
var request = require("request");
request({
    url :"http://pastebin.com/api/api_post.php",
    method :"POST",
    qs : {
       "api_dev_key" : MY_DEV_KEY,
       "api_option" :"paste",
       "api_paste_code" :"random text"
    }
},function(err,res,body){
    ...
});

我的理解是,由于方法是POST并且提供了查询字符串参数,qs对象中的值将作为key=value对存储在正文中。 (参考:如何在HTTP POST请求中发送参数?)

但是,我从PasteBin返回Bad API request, invalid api_option。 所以我curl来自我的终端的请求如下:

1
curl -X POST"http://pastebin.com/api/api_post.php" -d"api_dev_key=[MY_DEV_KEY]&api_option=paste&api_paste_code=some+random+text"

这很有效。

所以这导致了两个问题:

  • 当发出POST请求并提供qs时,参数的确切信息是什么?
  • 如何仅使用request模块发送URL编码的正文?

  • qs键重命名为对象中的formqs键用于指定URL末尾的查询字符串(例如,对于GET请求)。 form键用于指定表单URL编码的请求正文(例如,对于POST请求)。


    对我来说同样的问题和我的解决方案对我来说是完美的。

    1
    2
    3
    4
    5
    6
    request.post({
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    url :"http://pastebin.com/api/api_post.php",
    body :"api_dev_key=MY_DEV_KEY&api_option=paste&api_paste_code=andom text"},function(err,res,body){  ...});