- выгрузка файлов с сервера
- загрузка файлов на сервер
- HTTP GET/POST с возможностью прочитать ответ сервера
- Поддержка SSL
Тестировал на протоколах http, https, ftp, sftp, ftpes.
Краткий туториал в файле \doc\How-To.txt.
Модератор: Дед Пахом
Дед Пахом
Дед Пахом
Код: Выделить всё
LoadFileHTTP PROCEDURE (LocalFile_,URL_,xIndicator_)
TCurlHTTPClassEx Class(TCurlHTTPClass),Type
XFerInfo PROCEDURE(REAL dltotal, REAL dlnow, REAL ultotal, REAL ulnow), LONG, DERIVED
end
MyCurl TCurlHTTPClassEx
Code
MyCurl.Init()
...
CurlRes = MyCurl.ReadFile(URL_, LocalFile_)
... ! Обработка ошибок и завершение
! --- Собственно переопределение индикации загрузки
TCurlHTTPClassEx.XFerInfo PROCEDURE(REAL dltotal, REAL dlnow, REAL ultotal, REAL ulnow)
Code
If xIndicator_ > 0
If dlnow
If dltotal
xIndicator_{Prop:Progress} = dlnow * 100 / dltotal
else
xIndicator_{Prop:Progress} = dlnow / 1000
end
end
end
RETURN 0
Игорь Столяров
Код: Выделить всё
Proc1 PROCEDURE(), LONG
Код: Выделить всё
Proc1() !- вместо ret = Proc1()
Код: Выделить всё
XFerInfo PROCEDURE(REAL dltotal, REAL dlnow, REAL ultotal, REAL ulnow), LONG, PROC, VIRTUAL
Дед Пахом
Игорь Столяров
Дед Пахом
При вызове любого метода сервиса для установления защищенного по ГОСТ https-соединения необходимо передавать сведения о сертификате инициатора запроса (тот же сертификат, который используется для входа в защищенный Личный кабинет на официальном сайте ).
Например, на языке программирования C# это будет выглядеть следующим образом:
Код: Выделить всё
public HttpClient CreateHttpClient (X509Certificate2 cert) { var handler = new WebRequestHandler(); handler.ClientCertificates.add(cert); return new HttpClient(handler); }
Код: Выделить всё
curl.SetOpt(CURLOPT_POSTFIELDS, 'Двоичное DER-представление X.509-сертификата пользователя')
curl.SetOpt(CURLOPT_POSTFIELDSIZE, LEN(CLIP('Двоичное DER-представление X.509-сертификата пользователя')))
IKSoft
Код: Выделить всё
sCertFile STRING(256), AUTO
sCertType STRING(20), AUTO
sCertFile = 'estcert.pem'
sCertType = 'PEM'
curl.SetOpt(CURLOPT_SSLCERT, sCertFile)
curl.SetOpt(CURLOPT_SSLCERTTYPE, sCertType)
Дед Пахом
Спасибо, просто меня смутила фраза "передавать сведения "Дед Пахом писал(а): 14 Октябрь 2020, 15:56 Не пробовал, но логичнее использовать CURLOPT_SSLCERT, CURLOPT_SSLCERTTYPE:Код: Выделить всё
sCertFile STRING(256), AUTO sCertType STRING(20), AUTO sCertFile = 'estcert.pem' sCertType = 'PEM' curl.SetOpt(CURLOPT_SSLCERT, sCertFile) curl.SetOpt(CURLOPT_SSLCERTTYPE, sCertType)
IKSoft
IKSoft
Alex
Игорь Столяров
Например, при запросе по API получить список брэндов, латинобуквенные не кодируются , остальные кодируются.Игорь Столяров писал(а): 23 Март 2021, 14:23 P/S: А что JSON ключница делала ? Почему только часть ответа в ESC кодировке ?
Alex
Использую FromJSON от С10, но несколько раз его правил, так как сервисов уже десятки, везде разные "приколы" скажем такAlex писал(а): 23 Март 2021, 12:58 Прошу совета. Для решения задачи получения данных от веб сервиса использую libcurl. Ответ возвращается в виде строки JSON.
Часть JSON ответа кодирована Esc кодировкой( не латинские буквы).
Чем воспользоваться для превращения JSON ответа в QUEUE?
= FromJSON , описанным в хелпе нашего IDE (CW11)
= cJSON библиотекой
= Capesoft JSON
= или что-то иное
Код: Выделить всё
DecodeStr PROCEDURE(*string sIn)
c2 STRING(16)
c3 CSTRING(16)
c4 CSTRING(16)
sOut &CSTRING
Blength LONG
Slength LONG
CODE
Blength = len(clip(sIn)) + 100
sOut &= NEW(CSTRING(Blength))
clear(sOut)
loop
i# += 1
if len(clip(sIn)) < i# then break.
case sIn[i#]
of '\'
if len(clip(sIn)) < i#+1 then break.
case sIn[i#+1]
of 'b'
sOut = sOut &'<08>'
of 't'
sOut = sOut &'<09>'
of 'n'
sOut = sOut &'<10>'
of 'f'
sOut = sOut &'<12>'
of 'r'
sOut = sOut &'<13>'
of 'u'
clear(c2)
c3 = sub(sIn,i#+4,2)
ccc1# = strtol(c3,ccc2#,16)
c2[1] = chr(ccc1#)
c3 = sub(sIn,i#+2,2)
ccc1# = strtol(c3,ccc2#,16)
c2[2] = chr(ccc1#)
c3 = all('<0>',size(c3))
c4 = all('<0>',size(c4))
c4 = clip(c2)
Blength = size(c4)
Slength = size(c3)
RetCode# = winapi::WideCharToMultiByte (1251, 0, address(c4), Blength, address(c3), Slength, 0, 0)
sOut = sOut & clip(c3)
i#+= 4
else
sOut = sOut & sIn[i#+1]
end
i#+= 1
else
sOut = sOut & sIn[i#]
end
end
sIn = sOut
dispose(sOut)
RaFaeL
В квадратных скобках это массив одномерный, там и не должно быть ничего, кроме значенийAlex писал(а): 23 Март 2021, 14:28 Поля не разделяются фигурными скобками. Нет имен полей. Только значения.
RaFaeL
Alex
Создано на основе phpBB® Forum Software © phpBB Limited
Time: 0.071s | Peak Memory Usage: 1.37 МБ | GZIP: Off