libcurl for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
libcurl for Clarion
Ту уж определись, делаешь POST или GET
При POST Curl.SetHttpGET(TRUE) не надо
И вообще по-моему лишних параметров у тебя в запросе много
При POST Curl.SetHttpGET(TRUE) не надо
И вообще по-моему лишних параметров у тебя в запросе много
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
libcurl for Clarion
Убирал ... То же самое.
Хочу увидеть ответ сервера. Любой. Но всё заказчивается ошибкой запроса Libcurl.
Хочу увидеть ответ сервера. Любой. Но всё заказчивается ошибкой запроса Libcurl.
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 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
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
libcurl for Clarion
Спасибо ! Сам бы не додумался ...
Получил тот же результат и на реальных данных, но это уже ответ сервиса !
Дальше буду разбираться с их тех. поддержкой.
Получил тот же результат и на реальных данных, но это уже ответ сервиса !
Дальше буду разбираться с их тех. поддержкой.
За теми кто отстал - не возвращаться. (С) Кодекс
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
libcurl for Clarion
Третий день бьюсь с "вылетом" при работе с 1С-Битрикс. Причем вылет несистемный - в тестовом мини-приложении вроде работает, подключаю основной проект - вылетает, то сразу, то не сразу, причем поймать строку, на которой вылет невозможно, бывает что после SendRequestStr поставишь stop(), он выводится и пока на экране висит секунду, все крэшится. Иногда пишет Corrupt block/Unknown block type freed. This is probably caused by freeing a static variable or a bad pointer, чаще ничего не пишет. иногда виснет на закрытии окна с кодом работы. Иногда крэшится на его закрытии же. Задача то элементарная, залогиниться и файл прочитать. Если не логиниться или логиниться неправильно, то "затычки" читает нормально, а вот с ответами сервера в рамках протокола ерунда какая-то, хотя там банально текст а несколько строк. До этого десяток сервисов аналогичным образом подключил, все нормально было! Что делать? Нашел встроенный дебаг, но как пользоваться, не понял
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
libcurl for Clarion
Похоже на вызов DISPOSE(ref), где ref уже испорчена (обнулена к примеру).RaFaeL писал(а): ↑27 Январь 2018, 19:33Иногда пишет Corrupt block/Unknown block type freed. This is probably caused by freeing a static variable or a bad pointer
Насколько помню, дебаг всегда включён, вывод идёт в OutputDebugString.RaFaeL писал(а): ↑27 Январь 2018, 19:33Нашел встроенный дебаг, но как пользоваться, не понял
С уважением, ДП
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
libcurl for Clarion
Кажется, разобрался, libcurl оказался не при чем, но информация с дебаггера помогла
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
libcurl for Clarion
AddHTTPHeader(...)
SetHTTPHeaders()
...
FreeHTTPHeaders()
SendRequestStr(...)
Вроде как тоже вылетает
SetHTTPHeaders()
...
FreeHTTPHeaders()
SendRequestStr(...)
Вроде как тоже вылетает
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
libcurl for Clarion
А это вполне возможно, потому что нарушена логика - если уж вызвали SetHTTPHeaders, то не делайте FreeHTTPHeaders до вызова SendRequest, потому что SendRequest будет использовать хендл списка заголовков.RaFaeL писал(а): ↑27 Январь 2018, 23:32Вроде как тоже вылетает
С уважением, ДП
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
libcurl for Clarion
Предлагаю на FreeHTTPHeaders че-нить туда посылать чтобы хендл не использовался )
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 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
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
libcurl for Clarion
Johan de Klerk сделал несколько примеров на C6.3, выложено в папке examples\C6.3 apps\
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
libcurl for Clarion
Возможно ли сделать вариант метода Curl.FormPostStr() с типом данных для строки с ответом *IDynStr ?
Как в методе Curl.SendRequest. Просто неизвестно какого размера будет строка с ответом на запрос ...
Заранее спасибо !
Как в методе Curl.SendRequest. Просто неизвестно какого размера будет строка с ответом на запрос ...
Заранее спасибо !
За теми кто отстал - не возвращаться. (С) Кодекс