SASGIS

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

PascalScript: проблема при скачивании тайла через ResultURL

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

PascalScript: проблема при скачивании тайла через ResultURL

Сообщение VadimK60 » 27 июн 2025, 02:39

Здравствуйте!

Возникла проблема следующего характера.
Не могу скачать существующий .PNG-тайл с сервера при помощи стандартной передачи URL этого тайла переменной ResultURL.
Тайл этот прекрасно скачивается в любом броузере.
Даже DoHttpRequest его качает без проблем.
А вот передача ссылки через ResultURL перестала работать несколько месяцев назад. :(

Есть подозрение, что это связано с отдаваемым сервером новым content-type
было: content-type: image/png
стало: content-type: image/png;charset=UTF-8

Адаптировал ContentType в Params.txt - не помогло.

Или проблема в том, что сайт перешёл на HTTP/2 ?
Но по содержимому переменной ResponseHead видно, что тайл всё же скачивется, но на диск не сохраняется.

В чём может быть проблема ?
Точнее, как выйти из этой ситуации ?
Это баг программы или я что-то намудрил ?

Тестовый ZMP:
скрытый текст: показать
Код: Выделить всё
[PARAMS]
GUID={CBA03063-23D9-FAAF-CDDC-9182B98644B2}
asLayer=1
name_ru=TEST
name   =TEST
name_uk=TEST
CacheType=2
DefURLBase=
projection=1
sradiusa=6378137
sradiusb=6378137
NameInCache=TEST
Ext=.png
ContentType=image/png
UseDwn=1
IsUseDownloaderInScript=1
MaxConnectToServerCount=1


Тестовый скрипт:
скрытый текст: показать
Код: Выделить всё
Const
  NameInCache='C:cache\Test';
  VRequestUrl='https://downloadqdc.garmin.com/GCSProxyServlet/MarineImages/1201230202002002122.png?units=m';

VAR
  VResponseCode  : Cardinal  ;

  VResponseHeader,
  VResponseData  ,
  VRequestHeader : AnsiString;

BEGIN
  SaveToLocalFile(NameInCache+'\ResultURL'  ,ResultURL  );
  ResultURL:='';

// Method #1
  VRequestHeader  := '';
  VResponseHeader := '';
  VResponseData   := '';

  if Assigned(Downloader) then
     VResponseCode   := Downloader.DoHttpRequest(VRequestUrl, VRequestHeader, '', VResponseHeader, VResponseData);

  SaveToLocalFile(NameInCache+'\VResponseCode'  ,IntToStr(VResponseCode)+' - '+IntToStr(GetX)+' - '+IntToStr(GetY)+' - '+IntToStr(GetZ));
  SaveToLocalFile(NameInCache+'\VRequestUrl'    ,VRequestUrl    );
  SaveToLocalFile(NameInCache+'\VRequestHeader' ,VRequestHeader );
  SaveToLocalFile(NameInCache+'\VResponseHeader',VResponseHeader);
  SaveToLocalFile(NameInCache+'\VResponseData'  ,VResponseData  );

// Method #2
SaveToLocalFile(NameInCache+'\GetURLBase'  ,GetURLBase  );
SaveToLocalFile(NameInCache+'\RequestHead'  ,RequestHead  );
SaveToLocalFile(NameInCache+'\ResponseHead'  ,ResponseHead  );
SaveToLocalFile(NameInCache+'\ScriptBuffer'  ,ScriptBuffer  );
ResultURL:=VRequestUrl;

END.


Ответ сервера:
скрытый текст: показать
HTTP/2 200
date: Thu, 25 Jun 2025 22:10:42 GMT
content-type: image/png;charset=UTF-8
content-length: 38697
x-content-type-options: nosniff
x-xss-protection: 0
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
strict-transport-security: max-age=31536000 ; includeSubDomains
x-frame-options: DENY
last-modified: Thu, 25 Jun 2025 22:10:42 GMT
cf-cache-status: MISS
accept-ranges: bytes
vary: Accept-Encoding
server: cloudflare
cf-ray: 956009464b80902d-ARN


Ссылка на полный скрипт, который отлично работал на момент написания:
https://www.sasgis.org/forum/viewtopic. ... 959#p49959
VadimK60
Новичок
 
Сообщения: 29
Зарегистрирован: 24 окт 2018, 23:18
Благодарил (а): 6 раз.
Поблагодарили: 4 раз.

Re: PascalScript: проблема при скачивании тайла через ResultURL

Сообщение VadimK60 » 27 июн 2025, 11:03

При том что обычные PNG-шки с нормальным Content-Type (=image/png) и HTTP/1.1 скачиваются без проблем.

Пример для ссылки:
Код: Выделить всё
  VRequestUrl='https://i7.wikimapia.org/?x=9479&y=4961&zoom=14&r=9800661&type=map&lng=1';


скрытый текст: показать
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 27 Jun 2025 06:46:49 GMT
Content-Type: image/png
Content-Length: 3381
Connection: keep-alive
Last-Modified: Thu, 19 Jun 2025 14:42:51 GMT
X-MSC-pkid: 3658623790373404942
X-MSC-pkidml: 3658623790373469966
X-MSC-pkidhex_cor: 32c60af40000010e
X-MSC-pkidhex_cor_ml: 32c60af40000ff0e
X-MSC-hex_fname: /cache/32/c6/0af40000010e
X-MSC-hex_fname_ml: /cache/32/c6/0af40000ff0e
X-MSC-redir: /cache/32/c6/0af40000010e
ETag: "685421eb-d35"
Expires: Tue, 01 Jul 2025 06:46:49 GMT
Cache-Control: max-age=345600
Accept-Ranges: bytes
VadimK60
Новичок
 
Сообщения: 29
Зарегистрирован: 24 окт 2018, 23:18
Благодарил (а): 6 раз.
Поблагодарили: 4 раз.

Re: PascalScript: проблема при скачивании тайла через ResultURL

Сообщение VadimK60 » 27 июн 2025, 11:52

Pазобрался!
В param.txt:
  • убрал ContentType,
  • добавил его игнорирование (IgnoreContentType=1),
  • добавил ContentType по умолчанию (DefaultContentType=image/png).
Вроде всё заработало как надо!
Подсмотрел здесь: https://www.sasgis.org/mantis/view.php?id=790

скрытый текст: показать
[PARAMS]
GUID={CBA03063-23D9-FAAB-CDDC-9182B98644B2}
asLayer=1
name_ru=TEST
name =TEST
name_uk=TEST
CacheType=2
DefURLBase=
projection=1
sradiusa=6378137
sradiusb=6378137
NameInCache=TEST
Ext=.png
IgnoreContentType=1
DefaultContentType=image/png

UseDwn=1
IsUseDownloaderInScript=1
MaxConnectToServerCount=4
VadimK60
Новичок
 
Сообщения: 29
Зарегистрирован: 24 окт 2018, 23:18
Благодарил (а): 6 раз.
Поблагодарили: 4 раз.

Re: PascalScript: проблема при скачивании тайла через ResultURL

Сообщение VadimK60 » 27 июн 2025, 13:03

создал инцидент на багтрекере:
https://www.sasgis.org/mantis/view.php?id=3916
VadimK60
Новичок
 
Сообщения: 29
Зарегистрирован: 24 окт 2018, 23:18
Благодарил (а): 6 раз.
Поблагодарили: 4 раз.


Вернуться в Раздел для разработчиков программы SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

cron