@ProStavr

Альтернативная замена npm-библиотеки node-libcurl?

В зависимостях node-libcurl есть Python 2.7 и сам пакет давно устарел, вот и стоит задача заменить node-libcurl на другую аналогичную библиотеку. Запросы формируются на самом сервере...
Перерыл весь npm-репозитарий но ничего не подобрал. Нужен ваш совет.
-
На сервере пока использую такой cURL запрос.:
var querystring = require('querystring')
var Curl        = require('node-libcurl').Curl
	
var curl, data, hName, hValue, headers, options, statHeaders

statHeaders = {
    'Pragma': 'no-cache',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
}

headers = []
  
for (hName in statHeaders) {
    hValue = statHeaders[hName]
    headers.push(`${hName}: ${hValue}`)
}

data = {
    login: 'xxx',
    passwd: 'zzz'
}

data = querystring.stringify(data)

options = {
    url: 'https://bla-bla.net/api/...',
    method: 'GET'
}

curl = new Curl()
curl.setOpt(Curl.option.HEADER, true)
curl.setOpt(Curl.option.TIMEOUT, 60)
curl.setOpt(Curl.option.CONNECTTIMEOUT, 30)
curl.setOpt(Curl.option.NOPROGRESS, true)
curl.setOpt(Curl.option.VERBOSE, false)
curl.setOpt(Curl.option.FOLLOWLOCATION, true)
curl.setOpt(Curl.option.AUTOREFERER, true)
curl.setOpt(Curl.option.ACCEPT_ENCODING, 'gzip')
curl.setOpt(Curl.option.COOKIEFILE, './.tmp/tipa_proxy_cookie')
curl.setOpt(Curl.option.COOKIEJAR, './.tmp/tipa_proxy_cookie')
curl.setOpt(Curl.option.HTTPHEADER, headers)
curl.setOpt(Curl.option.URL, options.url)
curl.on('end', function(statusCode, data) {

    if (statusCode === 200) {

      var header_size = curl.getInfo('HEADER_SIZE')
      // тут обрабатываем полученное
    }
    return this.close()
});
curl.on('error', curl.close.bind(curl))
return curl.perform()


Понимаю, что придется переписать и этот кусок кода. Нужна node-libcurl альтернатива с наименьшими "танцами с бубном".
-
У cURL описание опций:
HEADER - TRUE чтобы включить заголовок в вывод.
TIMEOUT - Максимальное количество секунд, в течение которого могут выполняться функции cURL.
CONNECTTIMEOUT - Количество секунд ожидания при попытке подключения. Используйте 0, чтобы ждать бесконечно.
NOPROGRESS - TRUE чтобы отключить индикатор выполнения для передач cURL.
VERBOSE - TRUE для вывода подробной информации. Записывает вывод в STDERR или в файл, указанный с помощью CURLOPT_STDERR.
FOLLOWLOCATION - TRUE чтобы следовать любому заголовку «Location:» , который сервер отправляет как часть заголовка HTTP.
AUTOREFERER - TRUE для автоматической установки поля Referer: в запросах, где оно следует за перенаправлением Location:.
ACCEPT_ENCODING - Автоматическая распаковка HTTP-загрузок.
COOKIEFILE - Имя файла, содержащего данные cookie. Файл cookie может быть в формате Netscape или просто заголовки в стиле HTTP.
COOKIEJAR - Имя файла для сохранения всех внутренних файлов cookie при закрытии дескриптора, например, после вызова curl_close.
HTTPHEADER - Массив полей заголовка HTTP для установки в формате array('Content-type: text/plain', 'Content-length: 100').
URL - URL-адрес для получения.
curl.getInfo('HEADER_SIZE') - Количество байтов всех полученных заголовков.
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rPman
Да уж питон в зависимостях тут прямо 'детская неожиданность'

В похожей ситуации, когда было много кода и переписывать весь был не вариант, я создавал свою замену библиотеки, в которой реализованы только те методы, что используются в коде (а их почти всегда будет мало), зачастую это сильно упрощает работу но является адским костылем и все равно потребует рефакторинга в будущем, ну или как минимум нужно будет донести до следующего сопровождающего этот факт (а то он сильно удивится работающей не так как ожидается libcurl), кстати как вариант, с помощью инструментов ide редакторов переименовать имя класса curl на свой, типа mycurl, тогда тому кто будет это поддерживать в будущем будет проще это осознать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы