libcurl for Clarion

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

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

libcurl for Clarion

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

Игорь Столяров писал(а): 16 Август 2018, 6:45Можно ли мечтать о методе
Разумно, добавлю на днях.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

Прошу сразу не ругаться и не посылать меня в мануал (тем более, что я там уже был).
Вопрос скорее по теории протоколов, а не по реализации LibCurl …

Надо дёрнуть обычный GET (на простом примере):

Вот так работает:

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

  MyCurl.SendRequest('http://sms.ru/sms/send','',Loc:RespBuffer)
А вот так требует какой-то сертификат:

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

  MyCurl.SendRequest('https://sms.ru/sms/send','',Loc:RespBuffer)
В любом броузере или при вызове через WinAPI (WinINet) вариант с HTTPS работает.
Как установить сертификат перед вызовом - я вижу в примерах.
Но какой оно хочет сертификат ? Где вообще живут эти сертификаты и как их оттуда добыть ?
Заранее спасибо ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

Так а .SetSSL* прописаны или нет?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

RaFaeL писал(а): 16 Август 2018, 15:13Так а .SetSSL* прописаны или нет?
Упс ! Точно. Спасибо. Добавил:

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

     Curl.SetSSLVersion(CURL_SSLVERSION_DEFAULT)
     Curl.SetSSLVerifyHost(False)
     Curl.SetSSLVerifyPeer(False)
и HTTPS теперь с нами ! :)
Правильно ли я понимаю, что эти строчки можно включать всегда по умолчанию,
т.к. на обычный протокол HTTP они не действуют ? А с ними работает и HTTP и HTTPS ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

Я снова дико извиняюсь, но лучше спрошу, чем жить во тьме. ;) Пример FTPManager (любой).
В чём смысл добавления имени пользователя (без пароля !) в строку подключения, после выполненной авторизации ?
(закоментированные строки)

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

TCurlFtpClassEx.BuildUrl      PROCEDURE(STRING pUrl, STRING pUser, TSSHSettings pSSH)
url                             STRING(256)
sprotocol                       CSTRING(20)
  CODE
  sprotocol = CHOOSE(pSSH.AuthMethod = CURLSSH_AUTH_NONE, 'ftp://', 'sftp://')
  
!  IF pUser AND NOT INSTRING('@', pUser, 1, 1)
!    url = sprotocol & CLIP(pUser) &'@'& CLIP(pUrl)
!  ELSE
    url = sprotocol & CLIP(pUrl)
!  END

  IF url AND url[LEN(CLIP(url))] <> '/'
    url = CLIP(url) & '/'
  END
  
  RETURN CLIP(url)
Отследил до самого вызова perform() - нигде это не используется.

В примерах на сях такая конструкция имеет смысл только с паролем, если
используется упрощённая схема доступа к FTP серверу, без предварительной авторизации ...

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

  const char *remote = "sftp://user:pass@example.com/path/filename";
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

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

Что-то у меня не работало,а с именем пользователя в url заработало, так и оставил.
Игорь Столяров писал(а): 17 Август 2018, 9:24В примерах на сях такая конструкция имеет смысл только с паролем
https://www.cs.rutgers.edu/~watrous/user-pass-url.html
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

Спасибо, я понял.
Речь видимо идёт о подключении к открытому FTP разделу без предварительной авторизации,
но с именем пользователя отличным от "anonymous" … редкий случай, даже проверить не на чем. :)
С другой стороны - оно и не мешает. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

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

FTPManager универсальная программа, может подключаться к FTP/SFTP/FTPS, поэтому тестировал на многих серверах, какие-то из них на какие-то команды возвращали ошибку, поэтому нашёл вот такой способ передачи url, который работает везде (по крайней мере, много где). Правда, если в имени пользователя есть символ @, то libcurl не сможет правильно распарсить строку соединения.
В обычной жизни, как правило, достаточно вызвать SetDefaultProtocol('ftp'), SetUserPsw(user, psw) и WriteFile(url), где url примерно такая: '32.78.23.87'
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

Дед Пахом писал(а): 17 Август 2018, 15:57Правда, если в имени пользователя есть символ @
Это та же самая проблема, что и при вызове строки подключения к FTP в броузере, когда имя пользователя - это e-mail.
Просто заменяем "@" на "#40" + порт подключения.
У меня первый хостинг был на АГАВА, а там имя пользователя - всегда e-mail, без вариантов. ;)
см. например: http://www.slavyane.net.ua/kompyuternay ... =component
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

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

Игорь Столяров писал(а): 16 Август 2018, 6:45Можно ли мечтать о методе:
КОД: ВЫДЕЛИТЬ ВСЁ

FormPost PROCEDURE(STRING pUrl, *IDynStr pDynStr, <curl::ProgressDataProcType xferproc>), CURLcode, PROC
но с передачей параметров pPostFields
Обновление v1.29 на GitHub. Вместо размножения методов FormPost предлагается просто вызвать curl.SetPostFields('k1=v1&k2=v2').
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

Игорь Столяров писал(а): 16 Август 2018, 16:16Правильно ли я понимаю, что эти строчки можно включать всегда по умолчанию,
т.к. на обычный протокол HTTP они не действуют ? А с ними работает и HTTP и HTTPS ...
А зачем? У меня в классе этот флаг передается в параметре Init, соотв. если ресурсу нужен SSL - передаем, не нужен - не передаем
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

Дед Пахом писал(а): 17 Август 2018, 18:49Обновление v1.29 на GitHub. Вместо размножения методов FormPost предлагается просто вызвать curl.SetPostFields('k1=v1&k2=v2').
А старые варианты работать будут или они выпилены и придется все переделывать? (пока не качал не смотрел)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

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

RaFaeL писал(а): 17 Август 2018, 20:07А старые варианты работать будут
Старые я не трогал.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

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

Дед Пахом писал(а): 17 Август 2018, 18:49Обновление v1.29 на GitHub
Перезалил libcurlmail.clw, кое-что исправил.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

Заранее извиняюсь, но это снова я … :)
Решил развить успех и попробовать работать с запросами через файл (базовый пример PostFile).
Элементарный запрос для проверки ИНН на сайте ФНС. В примере поменял только URL:

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

  curl.Init()  
  url = 'http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl'   ! ЗАМЕНИЛ
  argname = 'userfile'
  infile = 'test.xml'
  respfile = 'post_response.txt'  
  res = curl.PostFile(url, argname, infile, respfile)
  ...
В XML файле набрал запрос (этот пример запроса опубликован и проверен):

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

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://ws.unisoft/FNSNDSCAWS2/Request"> 
<soapenv:Header/> 
  <soapenv:Body> 
    <req:NdsRequest2> 
      <!--1 to 10000 repetitions:--> 
      <req:NP INN="7812014560" KPP="770701001" DT="18.08.2018"/> 
    </req:NdsRequest2> 
  </soapenv:Body> 
</soapenv:Envelope>
Всё выполняется, получаю ответ: Success, see file post_response.txt for details !
Т.е. всё хорошо, но файла post_response.txt - НЕТ. Совсем. Нигде. :(
Я бы понял, если бы он содержал ошибку или мусор. Но он просто не формируется. :(
Я что-то не то делаю ? Заранее спасибо за наводку куда смотреть ... :)
Вложения
test.zip
Файл с запросом
(355 байт) 90 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
Закрыто