Curl JSON Post с помощью узла-libcurl - PullRequest
1 голос
/ 20 марта 2019

Я использую node-libcurl, чтобы отправить JSON на URL-адрес и получить обратно JSON.

Я протестировал CURL на PHP, и он отлично работает.

PHP-код следующий

$data = array('user' => $us, 'pwd' => $cl);
$data_string = json_encode($data);

$ch = curl_init('http://52.234.214.55:9001/autenticacion/externo');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string))
);

$result = curl_exec($ch);

Теперь я хочу, чтобы он работал на маршруте узла, который выглядит следующим образом:

app.post('/login2',function(req,res){

  //formato JSON ACHS
  var cvalue = {
      'user': 'user',
      'pwd': 'pass'
    }

    var curl = new Curl();

    curl.setOpt('URL', 'http://52.234.214.55:9001/autenticacion/externo');
    curl.setOpt('CURLOPT_CUSTOMREQUEST', "POST");
    curl.setOpt('CURLOPT_POSTFIELDS', cvalue);
    curl.setOpt('CURLOPT_RETURNTRANSFER', true);
    curl.setOpt('CURLOPT_HTTPHEADER', array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen(cvalue)));

curl.on('end', function(statusCode, body, headers) {

    console.info(statusCode);
    console.info('---');
    console.info(body.length);
    console.info('---');
    console.info(this.getInfo( 'TOTAL_TIME'));

    this.close();
});

curl.on('error', curl.close.bind(curl));
curl.perform();

})

Это не работает, я получаю следующую ошибку:

Задана неизвестная опция. Первый аргумент должен быть внутренним идентификатором опции или именем опции. Вы можете использовать константы Curl.option. в Curl.setOpt (C: \ Users \ Ingolf \ workspace \ w2_achs2 \ node_modules \ node-libcurl \ lib \ Curl.js: 980: 11) в C: \ Users \ Ingolf \ workspace \ w2_achs2 \ index.js: 130: 10

это указывает на

curl.setOpt('CURLOPT_CUSTOMREQUEST', "POST");

Как предложено и найдено в документации, я изменил его на:

curl.setOpt(Curl.option.URL, 'http://52.234.214.55:9001/autenticacion/externo');
curl.setOpt(Curl.option.CUSTOMREQUEST, "POST");
curl.setOpt(Curl.option.CURLOPT_POSTFIELDS, cvalue);
curl.setOpt(Curl.option.CURLOPT_RETURNTRANSFER, true);
curl.setOpt(Curl.option.CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen(cvalue)));

это выдает ошибку:

Неизвестная опция предоставлена. Первый аргумент должен быть внутренним идентификатором опции или именем опции. Вы можете использовать константы Curl.option. в Curl.setOpt (C: \ Users \ Ingolf \ workspace \ w2_achs2 \ node_modules \ node-libcurl \ lib \ Curl.js: 980: 11) в C: \ Users \ Ingolf \ workspace \ w2_achs2 \ index.js: 131: 10

, что указывает на

curl.setOpt(Curl.option.CURLOPT_POSTFIELDS, cvalue);

спасибо за помощь.

1 Ответ

0 голосов
/ 20 марта 2019

Ознакомьтесь с документацией node-libcurl: https://github.com/JCMais/node-libcurl/blob/HEAD/api.md#curloption--enum

Более конкретно, вам нужно использовать перечисленные опции, а не строку параметров, совместимую с cURL:

CURLOPT_URL становится Curl.option.URL

Попробуйте это:

curl.setOpt(Curl.option.CUSTOMREQUEST, "POST");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...