Notes |
|
(0001920)
|
zed
|
15-04-2011 11:55
|
|
Вот такая функция будет доступна в скрипте:
function DoRequest(const AHost, ADoc, ARequestHeader, APostData: AnsiString; UseSSL: Boolean; out AResponseHeader, AResponseData: AnsiString): Cardinal;
Она работает как с POST так и с обычными GET + введена опция UseSSL по которой устанавливается (либо нет) SSL соединение. Если нужен POST запрос, то заполняется переменная APostData, в противном случае (APostData = '') выполняется GET запрос.
Эта функция НЕ часть стандартной качалки, а сама в себе - абсолютно независимая. Основное назначение - получение дополнительных данных от сервера для формирования правильного запроса на тайл.
Результат функции - статус код ответа сервера. |
|
|
|
Только нужно заметить, что этот запрос будет подвешивать все обращения к скриптам этой карты. |
|
|
(0001922)
|
zed
|
15-04-2011 12:14
(edited on: 15-04-2011 12:15) |
|
Да, но это уже вопрос к архитектуре SAS - несколько потоков данной карты юзают один объект скрипта, когда по-хорошему надо бы использовать свой экземпляр на каждый поток. Поэтому, любой вызов скрипта подвешивает остальные запросы к этому скрипту. А http лишь частный случай, и упомянуто о нём в свете того, что запрос к серверу может занять несколько секунд (вплоть до тайм-аута) и соответственно притормозить (заставить ждать в очереди) остальные потоки. До этого в скриптах небыло столь время-затратных операций.
|
|
|
|
Имено поэтому оно все так и устроено было, что затратных операций там не предвиделось. |
|
|
(0003702)
|
zOn
|
05-09-2011 18:50
|
|
т.е. таким образом можно будет проверять версии и ключи?
странно, но хотелки с "автоматическим обновлением версий" я не нашел.
хотя многие об этом говорили на форумах. я только "за". |
|
|
(0004171)
|
zed
|
24-10-2011 15:58
(edited on: 24-10-2011 16:00) |
|
Можно пользоваться. Вот такой синтаксис:
function DoHttpRequest(const ARequestUrl, ARequestHeader, APostData: string; out AResponseHeader, AResponseData: string): Cardinal;
Да, и у каждого потока теперь свой экземпляр скрипта.
|
|
|
(0004172)
|
Tolik
|
25-10-2011 06:00
|
|
А можно пример? Как пользоваться? |
|
|
|
Лучше пока не пользоваться. Я собираюсь в ближайшее время синтаксис поменять. Вместо простой функции будет переменная с указателем на объект. |
|
|
(0004180)
|
zed
|
25-10-2011 17:56
|
|
>А можно пример? Как пользоваться?
var
url, head, head1, data, data1: string;
begin
url := 'http(s)://example.com/index.html';
head := 'User-Agent: SASPlanet';
data := 'Some post data or empty string for GET request';
if DoHttpRequest(url, head, data, head1, data1) = 200 then begin
...
end;
end |
|
|
(0007545)
|
zed
|
20-06-2012 08:12
|
|
|
|
(0007548)
|
vdemidov
|
20-06-2012 08:36
(edited on: 20-06-2012 11:14) |
|
Нет. Просто теперь вместо функции есть переменная Downloader типа ISimpleHttpDownloader, в которой может быть объект, который может делать http-запрос. И в zmp должна быть включена возможность запросов из скрипта:
IsUseDownloaderInScript=1
PS: Буду рад, если кто-то опишет это в Wiki
|
|
|
(0007566)
|
zed
|
20-06-2012 17:23
|
|
Не работает: Exception class Exception with message 'Error at script bytecode loading Cannot Import class:-'.
Делаю (в zmp прописал IsUseDownloaderInScript=1):
var
VRequestUrl, VRequestHeader, VPostData: string;
VResponseCode: Cardinal;
VResponseHeader, VResponseData: string;
begin
if (Downloader <> nil) then begin
VRequestUrl := 'http://google.com/';
VRequestHeader := '';
VPostData := '';
VResponseHeader := '';
VResponseData := '';
VResponseCode := Downloader.DoHttpRequest(VRequestUrl, VRequestHeader, VPostData, VResponseHeader, VResponseData);
if VResponseCode = 200 then begin
ScriptBuffer := VResponseData;
end else begin
ScriptBuffer := VResponseHeader;
end;
end;
end.
Если убрать проверку (Downloader <> nil), то падает с сообщением: Exception class EAccessViolation with message 'Access violation at address 00000001. Read of address 00000001'. |
|
|
|
Потому что проверять нужно используя Assigned() |
|
|
(0007569)
|
zed
|
20-06-2012 17:37
|
|
Ну да, зато всё-равно падает при вызове качалки с EAccessViolation. |
|
|
|
Ну это значит что качалка не создалась. Нужно смотреть почему. |
|
|
(0007571)
|
zed
|
20-06-2012 17:45
|
|
Создаётся. Но ты посмотри. |
|
|
|
|