我正在尝试使用request
模块create a new paste using the 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编码的正文?答案 0 :(得分:8)
将qs
键重命名为对象中的form
。 qs
密钥用于在URL的末尾指定查询字符串(例如,对于GET请求)。 form
密钥用于指定表单URL编码的请求正文(例如,对于POST请求)。
答案 1 :(得分:0)
对我来说同样的问题,最适合我的解决方法是
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){ ...});