libcurl for Clarion

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

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

libcurl for Clarion

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

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

libcurl for Clarion

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

Вот так я получаю ответ сервера "Invalid API client id":

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

  PROGRAM

  PRAGMA('project(#pragma link(libcurl.lib))')

  INCLUDE('libcurl.inc')

  MAP
  END

curl                          TCurlHttpClass
host                          STRING('https://diadoc-api.kontur.ru')
postfields                    STRING('login=user@skbkontur.ru&password=qwerty')
rc                            CURLcode, AUTO
response                      STRING(256), AUTO

  CODE
  curl.Init()
  
  curl.AddHttpHeader('Authorization: DiadocAuth ddauth_api_client_id=testClient-8ee1638deae84c86b8e2069955c2825a')
  curl.SetHttpHeaders()
  
  curl.SetOpt(CURLOPT_POSTFIELDS, 'Двоичное DER-представление X.509-сертификата пользователя')
  curl.SetOpt(CURLOPT_POSTFIELDSIZE, LEN(CLIP('Двоичное DER-представление X.509-сертификата пользователя')))

  curl.SetCustomRequest('POST')

  curl.SetSSLVerifyPeer(FALSE)
  curl.SetSSLVerifyHost(FALSE)

  rc = curl.SendRequestStr(host &'/Authenticate', postfields, response)
  IF rc = CURLE_OK
    MESSAGE('Response: '& CLIP(response), 'Test', ICON:Asterisk)
  ELSE
    MESSAGE('Fail: '& curl.StrError(rc), 'Test', ICON:Exclamation)
  END
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

Спасибо ! Сам бы не додумался ... :)
Получил тот же результат и на реальных данных, но это уже ответ сервиса ! :)
Дальше буду разбираться с их тех. поддержкой.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

Третий день бьюсь с "вылетом" при работе с 1С-Битрикс. Причем вылет несистемный - в тестовом мини-приложении вроде работает, подключаю основной проект - вылетает, то сразу, то не сразу, причем поймать строку, на которой вылет невозможно, бывает что после SendRequestStr поставишь stop(), он выводится и пока на экране висит секунду, все крэшится. Иногда пишет Corrupt block/Unknown block type freed. This is probably caused by freeing a static variable or a bad pointer, чаще ничего не пишет. иногда виснет на закрытии окна с кодом работы. Иногда крэшится на его закрытии же. Задача то элементарная, залогиниться и файл прочитать. Если не логиниться или логиниться неправильно, то "затычки" читает нормально, а вот с ответами сервера в рамках протокола ерунда какая-то, хотя там банально текст а несколько строк. До этого десяток сервисов аналогичным образом подключил, все нормально было! Что делать? Нашел встроенный дебаг, но как пользоваться, не понял
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

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

RaFaeL писал(а): 27 Январь 2018, 19:33Иногда пишет Corrupt block/Unknown block type freed. This is probably caused by freeing a static variable or a bad pointer
Похоже на вызов DISPOSE(ref), где ref уже испорчена (обнулена к примеру).
RaFaeL писал(а): 27 Январь 2018, 19:33Нашел встроенный дебаг, но как пользоваться, не понял
Насколько помню, дебаг всегда включён, вывод идёт в OutputDebugString.
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

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

libcurl for Clarion

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

libcurl оказался не при чем, но осадок остался :-)
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

AddHTTPHeader(...)
SetHTTPHeaders()
...
FreeHTTPHeaders()
SendRequestStr(...)

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

libcurl for Clarion

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

RaFaeL писал(а): 27 Январь 2018, 23:32Вроде как тоже вылетает
А это вполне возможно, потому что нарушена логика - если уж вызвали SetHTTPHeaders, то не делайте FreeHTTPHeaders до вызова SendRequest, потому что SendRequest будет использовать хендл списка заголовков.
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libcurl for Clarion

Сообщение RaFaeL »

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

libcurl for Clarion

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

Здесь написано
Pass a NULL to this option to reset back to no custom headers.
вот так должно работать (пока не могу проверить):

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

TCurlClass.FreeHttpHeaders    PROCEDURE()
  CODE
  SELF.headers.Free()
  SELF.SetOpt(CURLOPT_HTTPHEADER, 0)  !--  reset back to no custom headers
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

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

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

libcurl for Clarion

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

Johan de Klerk сделал несколько примеров на C6.3, выложено в папке examples\C6.3 apps\
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

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

Возможно ли сделать вариант метода Curl.FormPostStr() с типом данных для строки с ответом *IDynStr ?
Как в методе Curl.SendRequest. Просто неизвестно какого размера будет строка с ответом на запрос ...
Заранее спасибо ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Закрыто