Страница 1 из 1

LibCurl: Проверка наличия ссылки (PING) ?

Добавлено: 06 Июнь 2026, 20:21
Игорь Столяров
Добрый день !

Подскажите пожалуйста, можно с помощью библиотеки LibCurl проверить наличие страницы по заданной ссылке ?
Как я понимаю, сам CURL предлагает два варианта решения вопроса:

1. Получение заголовков веб-страницы (но многие сайты всегда возвращают т.н. "страницу 404"):

Код: Выделить всё

  CURL -I https://forum.clarionlife.net/viewtopic.php?t=5369
2. Проверка HTTP-статуса ссылки (200 - OK !) - это лучше !:

Код: Выделить всё

  CURL -s -w https://forum.clarionlife.net/viewtopic.php?t=5369
Можем ли мы что-то из этого cделать через класс LibCurl ? Может быть есть какие-то другие варианты ?
Вот максимально не хочется стартовать"пускач" и потом парсить "текстушки" для такой задачи. :) Спасибо !

LibCurl: Проверка наличия ссылки (PING) ?

Добавлено: 06 Июнь 2026, 20:27
Дед Пахом
Если есть работающий curl-скрипт, переведите его в вызов методов libcurl.

LibCurl: Проверка наличия ссылки (PING) ?

Добавлено: 06 Июнь 2026, 20:44
Игорь Столяров
Нет скрипта. Есть только опции к вызову CURL.EXE и я не понимаю как можно их повторить через класс. 🤷‍♀️

LibCurl: Проверка наличия ссылки (PING) ?

Добавлено: 06 Июнь 2026, 21:12
Дед Пахом
это скрипт и есть. Если добавить параметр --libcurl file.c и запустить скрипт, он сгенерит file.c с вызовами curl_easy_setopt, которые легко перевести на Clarion.

LibCurl: Проверка наличия ссылки (PING) ?

Добавлено: 06 Июнь 2026, 22:50
Игорь Столяров
Дед Пахом писал(а): 06 Июнь 2026, 21:12 Если добавить параметр --libcurl file.c и запустить скрипт
Спасибо ! В базовом варианте всё получилось, далее уже буду проверять на реальных ссылках. :D

LibCurl: Проверка наличия ссылки (PING) ?

Добавлено: 08 Июнь 2026, 9:09
Игорь Столяров
У меня получился вот такой, вполне себе, рабочий вариант (в т.ч. и для суверенных сервисов).
Если есть замечания или улучшения - буду рад услышать. :D

Я понимаю, что более правильный вариант был бы с TCurlClass.SendRequestStr(sLink) - но он не работает. 😢

Код: Выделить всё

!!! Проверка доступности ссылки  
HZ.CheckLink  Procedure(String sLink) !,Bool
  Code
  Self.Curl.FreeHttpHeaders()

  Self.Curl.SetSSLVerifyHost(False)
  Self.Curl.SetSSLVerifyPeer(False)
  Self.Curl.SetSSLVersion(CURL_SSLVERSION_DEFAULT)  
  
  Self.Curl.SetOpt(CURLOPT_TCP_KEEPALIVE,1)  ! Восстанавливать подключения
  Self.Curl.SetOpt(CURLOPT_NOPROGRESS,1)     ! Без индикатора
  Self.Curl.SetOpt(CURLOPT_NOBODY,1)         ! Только заголовок
  
  ! Получить HTTP статус запроса
  If Self.Curl.SendRequest(json::ToUtf8(sLink),Self.ResponseBuffer) = CURLE_OK        
     Return Choose(Self.Curl.GetResponseCode() = 200)
  end

  Return False