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

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8666
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 138 раз

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

Сообщение Игорь Столяров »

Добрый день !

Подскажите пожалуйста, можно с помощью библиотеки 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 ? Может быть есть какие-то другие варианты ?
Вот максимально не хочется стартовать"пускач" и потом парсить "текстушки" для такой задачи. :) Спасибо !
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3406
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 24 раза
Поблагодарили: 57 раз
Контактная информация:

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

Сообщение Дед Пахом »

Если есть работающий curl-скрипт, переведите его в вызов методов libcurl.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8666
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 138 раз

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

Сообщение Игорь Столяров »

Нет скрипта. Есть только опции к вызову CURL.EXE и я не понимаю как можно их повторить через класс. 🤷‍♀️
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3406
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 24 раза
Поблагодарили: 57 раз
Контактная информация:

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

Сообщение Дед Пахом »

это скрипт и есть. Если добавить параметр --libcurl file.c и запустить скрипт, он сгенерит file.c с вызовами curl_easy_setopt, которые легко перевести на Clarion.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8666
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 138 раз

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

Сообщение Игорь Столяров »

Дед Пахом писал(а): 06 Июнь 2026, 21:12 Если добавить параметр --libcurl file.c и запустить скрипт
Спасибо ! В базовом варианте всё получилось, далее уже буду проверять на реальных ссылках. :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8666
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 138 раз

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

Сообщение Игорь Столяров »

У меня получился вот такой, вполне себе, рабочий вариант (в т.ч. и для суверенных сервисов).
Если есть замечания или улучшения - буду рад услышать. :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
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Ответить