libcurl for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
В принципе, константу вроде тоже можно, только через ж:
curl.SetOpt(CURLOPT_USERAGENT, ADDRESS('My User Agent<0>'))
curl.SetOpt(CURLOPT_USERAGENT, ADDRESS('My User Agent<0>'))
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Спасибо, я думаю, что это лишнее. Нет никакой проблемы завести переменную.
Здесь главное понять, чего партия хочет от народа ...
Потому, что сервисы похожи на визу в США: ты вроде всё передал, что просили.
А они назад тебе фигу. Причём молча, без указания причины отказа.
Здесь главное понять, чего партия хочет от народа ...
Потому, что сервисы похожи на визу в США: ты вроде всё передал, что просили.
А они назад тебе фигу. Причём молча, без указания причины отказа.
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
По своему небольшому опыту работы с запросами 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)
...
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Имею непреодолимое желание поделиться некоторыми наблюдениями по работе
с LibCurl, т.к. целый день продолбился с подключением к сервису.
(спасибо за DebugView иначе проблемы были бы неразрешимыми)
1. Если выполнить вполне однозначное действие:
Результат будет весьма неожиданным. В заголовке запроса будет несколько строк,
которые никто туда добавлять не просил … Приходится убирать их принудительно:
2. Некоторые сервисы излишне нервно относятся к параметру размера запроса.
А LibCurl добавляет вот такой параметр в заголовок запроса по умолчанию:
Где 1234 - ОБЩИЙ размер запроса с учётом HEADER. А должен быть только размер тушки запроса (BODY).
Поэтому для того, что бы отправить пустой запрос, параметры которого задаются в шапке, приходится
принудительно выставлять:
Иначе сервис подвисает на TIMEOUT и возвращает ошибку "No BODY !" (видимо ожидает запрос указанного размера).
И ожидаю проблемы (завтра), когда придётся отправлять уже запросы с содержанием, т.к. их размер надо будет
считать вручную, причём до выполнения Curl.SendRequest() … Про
знаю, но они видимого эффекта на Content-Length в шапке запроса не оказывают.
Как-то оно так !
с LibCurl, т.к. целый день продолбился с подключением к сервису.
(спасибо за DebugView иначе проблемы были бы неразрешимыми)
1. Если выполнить вполне однозначное действие:
Код: Выделить всё
Curl.Init()
Curl.FreeHttpHeaders()
Curl.SendRequest( ….
которые никто туда добавлять не просил … Приходится убирать их принудительно:
Код: Выделить всё
Curl.AddHttpHeader('Accept:')
Curl.AddHttpHeader('Content-Type:')
Curl.AddHttpHeader('Expect:')
А LibCurl добавляет вот такой параметр в заголовок запроса по умолчанию:
Код: Выделить всё
Content-Length: 1234
Поэтому для того, что бы отправить пустой запрос, параметры которого задаются в шапке, приходится
принудительно выставлять:
Код: Выделить всё
Curl.AddHttpHeader('Content-Length: 0')
И ожидаю проблемы (завтра), когда придётся отправлять уже запросы с содержанием, т.к. их размер надо будет
считать вручную, причём до выполнения Curl.SendRequest() … Про
Код: Выделить всё
Curl.SetOpt(CURLOPT_POSTFIELDS, 'что-там')
Curl.SetOpt(CURLOPT_POSTFIELDSIZE, LEN(CLIP('что-там')))
Как-то оно так !
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Есть вопрос …
Сервис возвращает ответ на запрос:
Ключ доступа получаем в тушке ответа на запрос - без проблем.
А как получить данные из заголовка ответа ? Конкретно нужен статус успешности запроса (200).
Ведь LibCurl получает заголовок ответа. Можно ли получить его из LibCurl ?
Сервис возвращает ответ на запрос:
Код: Выделить всё
[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 ?
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
rc = curl.GetResponseCode()Игорь Столяров писал(а): ↑23 Август 2018, 8:44А как получить данные из заголовка ответа ? Конкретно нужен статус успешности запроса (200).
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
В общем случае для получения полей заголовка используйте методы
Код: Выделить всё
GetInfo::LONG PROCEDURE(CURLINFO info), LONG
GetInfo::SLIST PROCEDURE(CURLINFO info), LONG
GetInfo::STRING PROCEDURE(CURLINFO info), STRING
GetInfo::DOUBLE PROCEDURE(CURLINFO info), REAL
Код: Выделить всё
CURLINFO_EFFECTIVE_URL EQUATE(CURLINFO_STRING + 1)
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Спасибо ! А подскажите пожалуйста какие-нибудь интересные сервисы,
с которыми можно попробовать поработать через LibCurl + REST API …
с которыми можно попробовать поработать через LibCurl + REST API …
За теми кто отстал - не возвращаться. (С) Кодекс
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1379
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
libcurl for Clarion
Мы работаем с Дататой, Контур-апи, Гуглокалендарем и десятком разных айпи-телефоний. Еще с Битрикса заказы забираем но там без REST
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
С дадатой Вы классный пример выкладывали.RaFaeL писал(а): ↑24 Август 2018, 11:57Мы работаем с Дататой, Контур-апи
С Контуром (Диадок) я пробовал работать. В принципе - подключиться получается, но там навёрнутые структуры данных ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Просто подтвердите пожалуйста правильность моего утверждения.
Правильно ли я понимаю, что сейчас в LibCurl не реализован выбор версии HTTP протокола ?
Это то, что из командной строки делается вот так:
Правильно ли я понимаю, что сейчас в LibCurl не реализован выбор версии HTTP протокола ?
Это то, что из командной строки делается вот так:
Код: Выделить всё
curl --http1.0 ...
curl --http2 ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Я любопытствую про обёртку LibCurl для Clarion.
Не нашёл параметра CURLOPT_HTTP_VERSION для SetOpt(), ну и значения для этого параметра ...
Не нашёл параметра CURLOPT_HTTP_VERSION для SetOpt(), ну и значения для этого параметра ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
Я не все ещё CURLOPT-константы перенёс в Clarion, делаю это в основном по запросам пользователей.
Вот так будет в след. версии:
Вот так будет в след. версии:
Код: Выделить всё
CURLOPT_HTTP_VERSION EQUATE(84 + CURLOPTTYPE_LONG) !Specify which HTTP version to use! This must be set to one of the CURL_HTTP_VERSION* enums set below.
! /* These enums are for use with the CURLOPT_HTTP_VERSION option. */
CURL_HTTP_VERSION_NONE EQUATE(0) !setting this means we don't care, and that we'd like the library to choose the best possible for us!
CURL_HTTP_VERSION_1_0 EQUATE(1) !please use HTTP 1.0 in the request
CURL_HTTP_VERSION_1_1 EQUATE(2) !please use HTTP 1.1 in the request
CURL_HTTP_VERSION_2_0 EQUATE(3) !please use HTTP 2 in the request
CURL_HTTP_VERSION_2TLS EQUATE(4) !use version 2 for HTTPS, version 1.1 for HTTP
CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE EQUATE(5) !please use HTTP 2 without HTTP/1.1 Upgrade
CURL_HTTP_VERSION_LAST EQUATE(6) !*ILLEGAL* http version
С уважением, ДП