【问题标题】:Send URL-encoded parameters in Node.js using request module使用请求模块在 Node.js 中发送 URL 编码的参数
【发布时间】:2015-10-17 23:04:44
【问题描述】:

我正在尝试 create a new paste using the PasteBin APIrequest 模块,如下所示:

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对存储在body中。 (参考:How are parameters sent in an HTTP POST request?

但是,我从 PasteBin 收到了 Bad API request, invalid api_option。所以我curled 来自我的终端的请求,如下所示:

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"  

这很有效。

所以这就引出了两个问题:

  1. 在发出POST 请求并提供qs 时,究竟如何发送参数?
  2. 如何仅使用 request 模块发送 URL 编码的正文?

【问题讨论】:

    标签: node.js request npm pastebin


    【解决方案1】:

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

    【讨论】:

    • 我得出了我的结论(POST + qs = url-encoded body),因为如果我使用 qs,某些 API(即他们想要一个 url-encoded body)可以正常工作而不是form 发出POST 请求。对此有任何见解吗? (:
    • @LittleChild 我最好的猜测是这些 API 正在做类似body = req.body || req.query 或类似的事情。这意味着它将在请求正文或查询字符串中查找 POST 数据。
    • 如果我错了,请纠正我,POST 用于发送不应作为 URL 的一部分发送的敏感数据。因此,允许数据作为查询字符串发送的 API(同时在文档中提到了 url 编码的正文)正在公开数据供所有人查看?
    • @LittleChild 只要您将请求发送到 HTTPS 端点就可以了。在发送path 标头(将包含查询字符串)之前建立与 SSL 端点的连接。见这里:stackoverflow.com/a/323286/1397319
    • 非常感谢,伙计! SO问题的链接回答了我想到的另一个问题。
    【解决方案2】:

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

    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){  ...});  
    

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2019-01-08
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多