使用Node.js发送POST请求

时间:2016-12-18 07:58:14

标签: node.js post superagent

我认为使用NPM之一的模块应该相当容易,但是我尝试了两个不同的模块,并且他们都发送了没有附加标签的URL,据我所知。

网址为:https://safebooru.org/index.php?page=dapi&s=post&q=index 需要发送的是pid,limit和tags。

然而,我一直回来的结果就好像我刚刚发送过{' https://safebooru.org/index.php?page=dapi&s=post&q=index'

而不是说

' https://safebooru.org/index.php?page=dapi&s=post&q=index&pid=1&limit=10&tags=brown_hair'

请。是否有一个模块会按预期发送此dang请求,而不仅仅是提供的基本URL?

我尝试过的模块是“请求'和'superagent',我在stackoverflow上通过类似的问题引导过。

const rp = require("request")
const sa = require("superagent");

class SafebooruGetter {
    constructor(data){
        //none
    }

    get(limit, page, tags, callback){
        var results;
        sa.post('https://safebooru.org/index.php?page=dapi&s=post&q=index')
        .send({limit: limit, pid: page, tags: tags})
        .end(function(err, res){
            if(err)
                console.log(err);
            else
                callback(res);
        });

    }


    get2(limit, page, tags){
        var options = {
            method: 'POST',
            url: 'https://safebooru.org/index.php?page=dapi&s=post&q=index',
            form: {
                "limit": limit,
                "pid": page,
                "tags": tags,
            },
            headers: {
                'User-Agent': 'Super Agent/0.0.1',
                'Content-Type': 'application/x-www-form-urlencoded'
            }
            //json: true
        };
        //console.log(rp(options));
        // return rp(options).then((data) => { return (data)});
        return rp(options, function(error, response, body){
            if(!error && response.statusCode == 200){
                console.log(body);
                return body;
            }
        });
    }
}

1 个答案:

答案 0 :(得分:2)

您要将参数作为表单数据发送到

form: {
            "limit": limit,
            "pid": page,
            "tags": tags,
        },

但是你希望它作为一个像这个url的查询参数,

 https://safebooru.org/index.php?page=dapi&s=post&q=index&pid=1&limit=10&tags=brown_hair

这不可能。

如果您希望将其作为查询参数发送,请按照这样发送,

get2(limit, page, tags){
    var options = {
        method: 'POST',
        url: 'https://safebooru.org/index.php?page=dapi&s=post&q=index&pid='+page+'&limit='+limit+'&tags='+tags,
        headers: {
            'User-Agent': 'Super Agent/0.0.1',
            'Content-Type': 'application/x-www-form-urlencoded'
        }
        //json: true
    };
    //console.log(rp(options));
    // return rp(options).then((data) => { return (data)});
    return rp(options, function(error, response, body){
        if(!error && response.statusCode == 200){
            console.log(body);
            return body;
        }
    });
}

另一方面,将它作为查询参数捕获,就像在节点

中一样
  var limit = req.query.limit
  var pid = req.query.pid
  var tags = req.query.tags

希望这有帮助。