SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000596SAS.Планета[All Projects] Хотелкаpublic15-04-2011 11:5410-10-2012 11:45
Reporterzed 
Assigned Tovdemidov 
PrioritynormalSeverityfeatureReproducibilityhave not tried
StatusclosedResolutionfixed 
PlatformWindowsOSXPOS VersionSP3
Product Version110418 
Target Version120808Fixed in Version120808 
Summary0000596: Возможность выполнять HTTP запросы из паскаль-скриптов
DescriptionЧтобы можно было запрашивать дополнительные данные от сервера, для правильного формирования url и headers основного запроса.
Tagshttp headers, скрипты
Attached Files

- Relationships
related to 0000366closedzed Возможность определять headers сокетов 
child of 0000984closed PreloadPage= 

-  Notes
(0001920)
zed (manager)
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 запрос.

Эта функция НЕ часть стандартной качалки, а сама в себе - абсолютно независимая. Основное назначение - получение дополнительных данных от сервера для формирования правильного запроса на тайл.

Результат функции - статус код ответа сервера.
(0001921)
vdemidov (manager)
15-04-2011 12:01

Только нужно заметить, что этот запрос будет подвешивать все обращения к скриптам этой карты.
(0001922)
zed (manager)
15-04-2011 12:14
edited on: 15-04-2011 12:15

Да, но это уже вопрос к архитектуре SAS - несколько потоков данной карты юзают один объект скрипта, когда по-хорошему надо бы использовать свой экземпляр на каждый поток. Поэтому, любой вызов скрипта подвешивает остальные запросы к этому скрипту. А http лишь частный случай, и упомянуто о нём в свете того, что запрос к серверу может занять несколько секунд (вплоть до тайм-аута) и соответственно притормозить (заставить ждать в очереди) остальные потоки. До этого в скриптах небыло столь время-затратных операций.

(0001923)
vdemidov (manager)
15-04-2011 12:22

Имено поэтому оно все так и устроено было, что затратных операций там не предвиделось.
(0003702)
zOn (reporter)
05-09-2011 18:50

т.е. таким образом можно будет проверять версии и ключи?
странно, но хотелки с "автоматическим обновлением версий" я не нашел.
хотя многие об этом говорили на форумах. я только "за".
(0004171)
zed (manager)
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 (manager)
25-10-2011 06:00

А можно пример? Как пользоваться?
(0004173)
vdemidov (manager)
25-10-2011 06:23

Лучше пока не пользоваться. Я собираюсь в ближайшее время синтаксис поменять. Вместо простой функции будет переменная с указателем на объект.
(0004180)
zed (manager)
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 (manager)
20-06-2012 08:12

Тоже сломано?
(0007548)
vdemidov (manager)
20-06-2012 08:36
edited on: 20-06-2012 11:14

Нет. Просто теперь вместо функции есть переменная Downloader типа ISimpleHttpDownloader, в которой может быть объект, который может делать http-запрос. И в zmp должна быть включена возможность запросов из скрипта:
IsUseDownloaderInScript=1

PS: Буду рад, если кто-то опишет это в Wiki

(0007566)
zed (manager)
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'.
(0007568)
vdemidov (manager)
20-06-2012 17:32

Потому что проверять нужно используя Assigned()
(0007569)
zed (manager)
20-06-2012 17:37

Ну да, зато всё-равно падает при вызове качалки с EAccessViolation.
(0007570)
vdemidov (manager)
20-06-2012 17:40

Ну это значит что качалка не создалась. Нужно смотреть почему.
(0007571)
zed (manager)
20-06-2012 17:45

Создаётся. Но ты посмотри.
(0007640)
vdemidov (manager)
25-06-2012 11:49

Мда. Мелкая ошибка была.

- Users who viewed this issue
User List Anonymous (3781x), qq117511 (1x), ingener (2x), omen98 (1x), nnngrach (1x), png8 (2x), hrucker (1x), kurt23 (1x)
Total Views 3790
Last View 29-03-2024 10:26

- Issue History
Date Modified Username Field Change
15-04-2011 11:54 zed New Issue
15-04-2011 11:54 zed Status new => assigned
15-04-2011 11:54 zed Assigned To => zed
15-04-2011 11:55 zed Note Added: 0001920
15-04-2011 11:56 zed Relationship added related to 0000366
15-04-2011 12:01 vdemidov Note Added: 0001921
15-04-2011 12:03 vdemidov Target Version 110418 => 24xxxx
15-04-2011 12:14 zed Note Added: 0001922
15-04-2011 12:15 zed Note Edited: 0001922 View Revisions
15-04-2011 12:22 vdemidov Note Added: 0001923
15-04-2011 15:00 gpsMax Tag Attached: http headers
15-04-2011 15:00 gpsMax Tag Attached: скрипты
05-09-2011 18:50 zOn Note Added: 0003702
26-09-2011 17:24 zed Relationship added child of 0000984
24-10-2011 15:54 zed Status assigned => resolved
24-10-2011 15:54 zed Fixed in Version => 120808
24-10-2011 15:54 zed Resolution open => fixed
24-10-2011 15:58 zed Note Added: 0004171
24-10-2011 16:00 zed Note Edited: 0004171 View Revisions
25-10-2011 06:00 Tolik Note Added: 0004172
25-10-2011 06:23 vdemidov Note Added: 0004173
25-10-2011 17:56 zed Note Added: 0004180
23-01-2012 08:29 vdemidov Target Version 24xxxx => 120808
23-01-2012 10:50 vdemidov Product Version => 110418
20-06-2012 08:12 zed Note Added: 0007545
20-06-2012 08:36 vdemidov Note Added: 0007548
20-06-2012 11:14 vdemidov Note Edited: 0007548 View Revisions
20-06-2012 13:06 zed Assigned To zed =>
20-06-2012 13:06 zed Status resolved => confirmed
20-06-2012 13:06 zed Fixed in Version 120808 =>
20-06-2012 13:08 zed Assigned To => vdemidov
20-06-2012 13:08 zed Status confirmed => resolved
20-06-2012 13:08 zed Fixed in Version => 120808
20-06-2012 17:23 zed Note Added: 0007566
20-06-2012 17:32 vdemidov Note Added: 0007568
20-06-2012 17:37 zed Note Added: 0007569
20-06-2012 17:40 vdemidov Note Added: 0007570
20-06-2012 17:45 zed Note Added: 0007571
21-06-2012 17:14 zed Status resolved => assigned
22-06-2012 13:37 vdemidov Resolution fixed => reopened
25-06-2012 11:49 vdemidov Note Added: 0007640
25-06-2012 11:49 vdemidov Status assigned => resolved
25-06-2012 11:49 vdemidov Resolution reopened => fixed
10-10-2012 11:45 Tolik Status resolved => closed



Copyright © 2007 - 2024 SAS.Planet Team