Страница 14 из 30

libcurl for Clarion

Добавлено: 25 Ноябрь 2017, 10:59
RaFaeL
Ту уж определись, делаешь POST или GET
При POST Curl.SetHttpGET(TRUE) не надо
И вообще по-моему лишних параметров у тебя в запросе много

libcurl for Clarion

Добавлено: 25 Ноябрь 2017, 11:03
Игорь Столяров
Убирал ... То же самое. :(
Хочу увидеть ответ сервера. Любой. Но всё заказчивается ошибкой запроса Libcurl. :(

libcurl for Clarion

Добавлено: 25 Ноябрь 2017, 12:15
Дед Пахом
Вот так я получаю ответ сервера "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

libcurl for Clarion

Добавлено: 25 Ноябрь 2017, 12:33
Игорь Столяров
Спасибо ! Сам бы не додумался ... :)
Получил тот же результат и на реальных данных, но это уже ответ сервиса ! :)
Дальше буду разбираться с их тех. поддержкой.

libcurl for Clarion

Добавлено: 27 Январь 2018, 19:33
RaFaeL
Третий день бьюсь с "вылетом" при работе с 1С-Битрикс. Причем вылет несистемный - в тестовом мини-приложении вроде работает, подключаю основной проект - вылетает, то сразу, то не сразу, причем поймать строку, на которой вылет невозможно, бывает что после SendRequestStr поставишь stop(), он выводится и пока на экране висит секунду, все крэшится. Иногда пишет Corrupt block/Unknown block type freed. This is probably caused by freeing a static variable or a bad pointer, чаще ничего не пишет. иногда виснет на закрытии окна с кодом работы. Иногда крэшится на его закрытии же. Задача то элементарная, залогиниться и файл прочитать. Если не логиниться или логиниться неправильно, то "затычки" читает нормально, а вот с ответами сервера в рамках протокола ерунда какая-то, хотя там банально текст а несколько строк. До этого десяток сервисов аналогичным образом подключил, все нормально было! Что делать? Нашел встроенный дебаг, но как пользоваться, не понял

libcurl for Clarion

Добавлено: 27 Январь 2018, 20:05
Дед Пахом
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.

libcurl for Clarion

Добавлено: 27 Январь 2018, 21:06
RaFaeL
Кажется, разобрался, libcurl оказался не при чем, но информация с дебаггера помогла

libcurl for Clarion

Добавлено: 27 Январь 2018, 21:10
Дед Пахом
libcurl оказался не при чем, но осадок остался :-)

libcurl for Clarion

Добавлено: 27 Январь 2018, 23:32
RaFaeL
AddHTTPHeader(...)
SetHTTPHeaders()
...
FreeHTTPHeaders()
SendRequestStr(...)

Вроде как тоже вылетает

libcurl for Clarion

Добавлено: 27 Январь 2018, 23:46
Дед Пахом
RaFaeL писал(а): 27 Январь 2018, 23:32Вроде как тоже вылетает
А это вполне возможно, потому что нарушена логика - если уж вызвали SetHTTPHeaders, то не делайте FreeHTTPHeaders до вызова SendRequest, потому что SendRequest будет использовать хендл списка заголовков.

libcurl for Clarion

Добавлено: 27 Январь 2018, 23:57
RaFaeL
Предлагаю на FreeHTTPHeaders че-нить туда посылать чтобы хендл не использовался )

libcurl for Clarion

Добавлено: 28 Январь 2018, 0:06
Дед Пахом
Здесь написано
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

libcurl for Clarion

Добавлено: 28 Январь 2018, 22:49
Дед Пахом
Немного потестировал, вроде хуже не стало.
Выложил версию 1.20.

libcurl for Clarion

Добавлено: 08 Август 2018, 14:57
Дед Пахом
Johan de Klerk сделал несколько примеров на C6.3, выложено в папке examples\C6.3 apps\

libcurl for Clarion

Добавлено: 09 Август 2018, 18:59
Игорь Столяров
Возможно ли сделать вариант метода Curl.FormPostStr() с типом данных для строки с ответом *IDynStr ?
Как в методе Curl.SendRequest. Просто неизвестно какого размера будет строка с ответом на запрос ...
Заранее спасибо ! :)