2016-12-18 4 views
0

Я думаю, что это должно быть довольно легко с использованием одного из модулей с NPM, но я пробовал два разных, и они оба отправляют URL-адрес без тегов, добавленных до Я могу сказать.Отправить запрос POST с помощью Node.js

Адрес: 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-адрес?

Модули, которые я пробовал, были «запросами» и «суперагентными», к которым меня привели по аналогичным вопросам в 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; 
      } 
     }); 
    } 
} 

ответ

2

Вы отправляете параметры, как формы данных в этом

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

Но вы ожидаете его прийти в качестве параметра запроса, как этот адрес,

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 

Надеется, что это помогает.

+0

Да, это сработало, спасибо! –

Смежные вопросы