libcurl for Clarion

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

libcurl for Clarion

Сообщение Игорь Столяров » 21 Август 2018, 13:35

Дед Пахом писал(а):
21 Август 2018, 11:12
Для строк в SetOpt надо передавать переменную
Спасибо ! Пошла вода в хату … :)
Это меня, пиашписты ввели в заблуждение, потому, что у них синтаксис:

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

   $ch = curl_init( $url );
   curl_setopt( $ch, CURLOPT_USERAGENT, "My User Agent" );
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2306
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

libcurl for Clarion

Сообщение Дед Пахом » 21 Август 2018, 14:43

В принципе, константу вроде тоже можно, только через ж:
curl.SetOpt(CURLOPT_USERAGENT, ADDRESS('My User Agent<0>'))
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 21 Август 2018, 15:01

Спасибо, я думаю, что это лишнее. ;) Нет никакой проблемы завести переменную.
Здесь главное понять, чего партия хочет от народа ...

Потому, что сервисы похожи на визу в США: ты вроде всё передал, что просили.
А они назад тебе фигу. Причём молча, без указания причины отказа. :)
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2306
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

libcurl for Clarion

Сообщение Дед Пахом » 21 Август 2018, 19:12

v1.31 решает проблему с большими письмами.
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 22 Август 2018, 8:25

По своему небольшому опыту работы с запросами LibCurl, хочу сказать, что многие
сервисы не очень рады таким запросам. Это если сказать без мата.
Поэтому лучше всегда сразу маскироваться под рабочую пчелу. ;)

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

Loc:UserAgent  CSTRING('Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)')

   Code   
   Curl.Init()
   Curl.SetOpt(CURLOPT_USERAGENT,  Loc:UserAgent)
   Curl.SetOpt(CURLSSH_AUTH_AGENT, Loc:UserAgent)
   ...   
Однако ! :)
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 22 Август 2018, 22:35

Имею непреодолимое желание поделиться некоторыми наблюдениями по работе
с LibCurl, т.к. целый день продолбился с подключением к сервису.
(спасибо за DebugView иначе проблемы были бы неразрешимыми)

1. Если выполнить вполне однозначное действие:

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

  Curl.Init()
  Curl.FreeHttpHeaders()
  Curl.SendRequest( ….
Результат будет весьма неожиданным. В заголовке запроса будет несколько строк,
которые никто туда добавлять не просил … Приходится убирать их принудительно:

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

  Curl.AddHttpHeader('Accept:')
  Curl.AddHttpHeader('Content-Type:')
  Curl.AddHttpHeader('Expect:')
2. Некоторые сервисы излишне нервно относятся к параметру размера запроса.
А LibCurl добавляет вот такой параметр в заголовок запроса по умолчанию:

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

Content-Length: 1234
Где 1234 - ОБЩИЙ размер запроса с учётом HEADER. А должен быть только размер тушки запроса (BODY).
Поэтому для того, что бы отправить пустой запрос, параметры которого задаются в шапке, приходится
принудительно выставлять:

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

    Curl.AddHttpHeader('Content-Length: 0')
Иначе сервис подвисает на TIMEOUT и возвращает ошибку "No BODY !" (видимо ожидает запрос указанного размера).
И ожидаю проблемы (завтра), когда придётся отправлять уже запросы с содержанием, т.к. их размер надо будет
считать вручную, причём до выполнения Curl.SendRequest() … Про

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

  Curl.SetOpt(CURLOPT_POSTFIELDS, 'что-там')
  Curl.SetOpt(CURLOPT_POSTFIELDSIZE, LEN(CLIP('что-там')))
знаю, но они видимого эффекта на Content-Length в шапке запроса не оказывают.
Как-то оно так ! :)
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 23 Август 2018, 8:44

Есть вопрос …
Сервис возвращает ответ на запрос:

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

[4700] [libcurl] HEADER_IN: HTTP/1.1 200 OK 
[4700] [libcurl] HEADER_IN: Date: Thu, 23 Aug 2018 05:08:07 GMT 
[4700] [libcurl] HEADER_IN: Content-Type: application/octet-stream 
[4700] [libcurl] HEADER_IN: Content-Length: 172 
[4700] [libcurl] HEADER_IN: Connection: keep-alive 
[4700] [libcurl] HEADER_IN: Access-Control-Allow-Origin: * 
[4700] [libcurl] HEADER_IN:  
[4700] [libcurl] DATA_IN: Session key: J6rUWkuLyghvn/i/y9nSbAszyICal/BGOxM2B
[4700] [libcurl] TEXT: Curl_http_done: called premature == 0
Ключ доступа получаем в тушке ответа на запрос - без проблем.
А как получить данные из заголовка ответа ? Конкретно нужен статус успешности запроса (200).
Ведь LibCurl получает заголовок ответа. Можно ли получить его из LibCurl ?
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2306
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

libcurl for Clarion

Сообщение Дед Пахом » 23 Август 2018, 10:36

Игорь Столяров писал(а):
23 Август 2018, 8:44
А как получить данные из заголовка ответа ? Конкретно нужен статус успешности запроса (200).
rc = curl.GetResponseCode()
С уважением, ДП

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2306
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

libcurl for Clarion

Сообщение Дед Пахом » 23 Август 2018, 11:46

Игорь Столяров писал(а):
23 Август 2018, 8:44
А как получить данные из заголовка ответа ?
В общем случае для получения полей заголовка используйте методы

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

GetInfo::LONG                   PROCEDURE(CURLINFO info), LONG
GetInfo::SLIST                  PROCEDURE(CURLINFO info), LONG
GetInfo::STRING                 PROCEDURE(CURLINFO info), STRING
GetInfo::DOUBLE                 PROCEDURE(CURLINFO info), REAL
где параметр info - одно из значений перечисления CURLINFO, начиная с

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

CURLINFO_EFFECTIVE_URL        EQUATE(CURLINFO_STRING + 1)
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 24 Август 2018, 6:00

Спасибо ! А подскажите пожалуйста какие-нибудь интересные сервисы,
с которыми можно попробовать поработать через LibCurl + REST API … :)
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 891
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL » 24 Август 2018, 11:57

Мы работаем с Дататой, Контур-апи, Гуглокалендарем и десятком разных айпи-телефоний. Еще с Битрикса заказы забираем но там без REST

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 24 Август 2018, 12:10

RaFaeL писал(а):
24 Август 2018, 11:57
Мы работаем с Дататой, Контур-апи
С дадатой Вы классный пример выкладывали. :)
С Контуром (Диадок) я пробовал работать. В принципе - подключиться получается, но там навёрнутые структуры данных ... :(
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 25 Август 2018, 6:10

Просто подтвердите пожалуйста правильность моего утверждения.
Правильно ли я понимаю, что сейчас в LibCurl не реализован выбор версии HTTP протокола ?

Это то, что из командной строки делается вот так:

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

   curl --http1.0 ...
   curl --http2 ...
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2306
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

libcurl for Clarion

Сообщение Дед Пахом » 25 Август 2018, 11:37

Как это может быть, если curl это оболочка над libcurl?
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4237
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libcurl for Clarion

Сообщение Игорь Столяров » 25 Август 2018, 11:51

Я любопытствую про обёртку LibCurl для Clarion.
Не нашёл параметра CURLOPT_HTTP_VERSION для SetOpt(), ну и значения для этого параметра ...
«V» значит Вендетта !

Ответить