我正在尝试使用request
模块通过Pastebin API创建新的粘贴,代码如下:
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
对,并包含在请求体中。(参考: How are parameters sent in an HTTP POST request?)
然而,我从PasteBin那里收到了一个Bad API request, invalid api_option
的错误信息。所以我用curl
在终端中发送了请求,如下所示:
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编码的请求体?
POST
+qs
= url-encoded body),是因为在使用POST
请求时,有些 API(声称需要 url-encoded body)如果我使用qs
而不是form
,则可以正常工作。对此有何见解?(: - An SO Userbody = req.body || req.query
的操作,或者类似于此类的操作。这意味着它将在请求的正文或查询字符串中查找POST数据。 - idbeholdPOST
用于发送不应作为 URL 的一部分发送的敏感数据。因此,允许将数据作为查询字符串发送的 API(同时在文档中提到编码的请求体)正在向所有人公开数据? - An SO Userpath
标头之前(其中包含查询字符串),会先建立与 SSL 端点的连接。请参见此处:https://dev59.com/I3RC5IYBdhLWcg3wW_tk#323286 - idbehold