Использование Pastebin API в Node.js

Я пытался опубликовать вставку в Pastebin в Node.js, но, похоже, я делаю это неправильно.

Я получаю неверный запрос API, неверный параметр api_option, однако я явно устанавливаю для параметра api_option значение вставить, как того требует документация.

var http = require('http');
var qs = require('qs');

var query = qs.stringify({
  api_option: 'paste',
  api_dev_key: 'xxxxxxxxxxxx',
  api_paste_code: 'Awesome paste content',
  api_paste_name: 'Awesome paste name',
  api_paste_private: 1,
  api_paste_expire_date: '1D'
});

var req = http.request({
  host: 'pastebin.com',
  port: 80,
  path: '/api/api_post.php',
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/form-data',
    'Content-Length': query.length
  }
}, function(res) {
  var data = '';
  res.on('data', function(chunk) {
    data += chunk;
  });
  res.on('end', function() {
    console.log(data);
  });
});

req.write(query);
req.end();

console.log(query) подтверждает, что строка правильно закодирована и что api_option присутствует, и установлено значение вставить.

Теперь я вечно искал возможные причины. Я также попытался установить кодировку для записи req.write(query, 'utf8'), потому что API Pastebin упоминает, что POST должен быть в кодировке UTF-8. Я переписывал это снова и снова и много раз пересматривал документацию Node HTTP.

Я почти уверен, что полностью что-то пропустил здесь, потому что я не понимаю, как это может потерпеть неудачу. Кто-нибудь знает, что я сделал не так?


person wiill    schedule 07.07.2012    source источник


Ответы (2)


То, что вы создаете, не является правильно сформированным multipart/form-data запросом; это больше похоже на запрос application/x-www-form-urlencoded. Из того, что я могу сказать об API pastebin (на самом деле я никогда его не использовал), последнее — это то, что вам действительно нужно, поэтому попробуйте изменить Content-Type на него.

person ebohlman    schedule 08.07.2012
comment
Как я уже сказал, это было то, что я полностью пропустил. Спасибо - person wiill; 08.07.2012

Это не отвечает прямо на ваш вопрос, но, возможно, это может помочь...

Вы пытались использовать модуль запроса?

Ваш пример будет намного легче читать, и вы можете найти проблему...

mikeal/request

person Charles    schedule 07.07.2012
comment
Хотя это не решило мою проблему, этот модуль интересен, я отмечаю это. - person wiill; 08.07.2012