Как в методе Curl.SendRequest. Просто неизвестно какого размера будет строка с ответом на запрос ...
Заранее спасибо !

Игорь, сделал (FormPost(STRING pUrl, *IDynStr pDynStr, <curl::ProgressDataProcType xferproc>)), но не проверял, сообщи результат, тогда выложу на GitHub.Игорь Столяров писал(а): ↑09 Август 2018, 18:59Возможно ли сделать вариант метода Curl.FormPostStr() с типом данных для строки с ответом *IDynStr ?
Как в методе Curl.SendRequest. Просто неизвестно какого размера будет строка с ответом на запрос ...
Спасибо, проверил всё прекрасно работает. По крайне мере на моих примерах проблем нет.
Код: Выделить всё
Loc:WebString &= GetStringHTTP('http://www.cbr.ru/currency_base/D_print.aspx?date_req=11.08.2018')
If ~(Loc:WebString &= NULL) ….
!----
GetStringHTTP Procedure(String xURL_) !, *String
Curl TCurlHttpClass
Loc:Res CURLcode
Loc:RespBuffer &IDynStr
Loc:RetValue &String
CODE
Loc:RetValue &= NULL
Loc:RespBuffer &= NewDynStr()
Curl.Init()
Loc:Res = Curl.FormPost(Clip(xURL_), Loc:RespBuffer)
If Loc:Res = CURLE_OK
If Loc:RespBuffer.StrLen() > 0
Loc:RetValue &= New(String(Loc:RespBuffer.StrLen())) ! Создаем буфер для загрузки по размеру строки
If ~(Loc:RetValue &= Null) then Loc:RespBuffer.CopyTo(Loc:RetValue,Loc:RespBuffer.StrLen()).
end
elsIf Loc:Res = -1
Message(' Неизвестная ошибка запроса FormPost: ' & Loc:Res)
else
Message(' Ошибка запроса FormPost: ' & Loc:Res & '| ' & Curl.StrError(Loc:Res))
end
DisposeDynStr(Loc:RespBuffer)
Return Loc:RetValue
Для этой задачи FormPost совершенно не к месту, простой GET запрос получает страницу:Игорь Столяров писал(а): ↑11 Август 2018, 7:02Loc:Res = Curl.FormPost(Clip(xURL_), Loc:RespBuffer)
Код: Выделить всё
res = curl.SendRequest('http://www.cbr.ru/currency_base/daily/', 'date_req=11.08.2018', respbuffer)
Я с этого начинал.
Конечно.Игорь Столяров писал(а): ↑11 Август 2018, 11:46Можно я сброшу в личку реальный пример запроса с проблемой
Игорь Столяров писал(а): ↑14 Август 2018, 9:43звращает страницу MyUrl из кеша
В общем, я бы для начала передал в заголовке Cache-Control: "no-cache", чтобы сервер обновлял данные.https://stackoverflow.com/questions/26547608/how-to-stop-curl-from-caching-data писал(а):curl doesn't cache anything, it simply sends a HTTP request to the server (and with CURLOPT_VERBOSE you can easily inspect it) and then it pipes all data it receives on to the write callback that you provide. There's no caching, no middle layers, no magic.
Код: Выделить всё
Curl.FreeHttpHeaders()
Curl.AddHttpHeader('Cache-Control: no-cache')
If Curl.SetHttpHeaders() <> CURLE_OK.
Код: Выделить всё
curl.FreeHttpHeaders()
IF RECORDS(HttpHeaders)
LOOP qIndex = 1 TO RECORDS(HttpHeaders)
GET(HttpHeaders, qIndex)
curl.AddHttpHeader(HttpHeaders.HttpHeader)
IF res <> CURLE_OK ! <<<<----- ВОТ ЗДЕСЬ ПРОВЕРЯЕТСЯ ТО, ЧЕГО НЕ МОЖЕТ БЫТЬ ....
MESSAGE('AddHttpHeader failed: '& curl.StrError(res), 'libcurl', ICON:Exclamation)
END
END
res = curl.SetHttpHeaders()
IF res <> CURLE_OK
MESSAGE('SetHttpHeaders failed: '& curl.StrError(res), 'libcurl', ICON:Exclamation)
END
END
Есть такое. Правда, примеры к 6-ке я особо не проверяю, собираются, работают - и ладно.Игорь Столяров писал(а): ↑14 Август 2018, 21:05Кстати, в примерах есть маленький косяк-с.
Ввиду полного отсутствия описания к LibCurl, все примеры - это очень полезный учебный материал.