View Issue Details

IDProjectCategoryView StatusLast Update
0003550SAS.ПланетаБаг / Bugpublic30-08-2019 13:57
Reporteraflexus Assigned Tozed  
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Product Version190707 
Target Version191221Fixed in Version191221 
Summary0003550: Не удаётся отправить Cookie в закодированном виде
DescriptionGetScript.txt

Отправка через RequestHead-параметр переменной закодированной в URLEncode() по-факту отправляется декодированной.

Если эту же переменную сохранить банально в файл, кодировка сохраняется.
Steps To ReproduceТо есть:

   v := 'kd3/sd+asi adf';
   e := URLEncode(v);       // -> 'kd3%2Fsd%2Basi%20adf'
И вот если сделать запрос с таким вот заголовком:

   RequestHead := 'Data: e + 0000013#10';
То на самом деле отправится декодированная ('kd3/sd+asi adf') переменная.
TagsNo tags attached.
Attached Files
GetUrlScript.txt (1,186 bytes)   
function isInString(const ch: Char; const s: String): Boolean;
var i: Integer;
begin
  Result := False;
  for i := 1 to Length(s) do begin
    Result := s[i] = ch;
    if Result then Break;
  end;
end;
    
function URLEncode(const ASrc: String): String;
var 
  i: Integer;
  SafeChars: String;
begin
  Result := '';
  SafeChars := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  for i := 1 to Length(ASrc) do begin
    if not isInString( ASrc[i], SafeChars ) then begin
      Result := Result + '%' + IntToHex(Ord(ASrc[i]), 2);
    end else begin
      Result := Result + ASrc[i];
    end;
  end;
end;

var
  v: string;
  e: string;
begin
  v := 'kd3/sd+asi adf';
  e := URLEncode(v);
  
  writeln(e);
  
  ResultURL := 
    'http://' + Chr(Ord('a') + Random(3)) + '.tile.openstreetmap.org/' + 
    IntToStr(GetZ-1) + '/' + IntToStr(GetX) + '/' + IntToStr(GetY) + '.png';
  
  RequestHead := 
    'User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0' + #13#10 +
    'Referer: https://www.openstreetmap.org/' + #13#10 +
    'Data: ' + e + #13#10 +
    'Accept: image/webp,*/*';
end.
GetUrlScript.txt (1,186 bytes)   
Screenshot_1.png (62,066 bytes)   
Screenshot_1.png (62,066 bytes)   
Image 1.png (43,129 bytes)   
Image 1.png (43,129 bytes)   
GetUrlScript_Error.txt (1,174 bytes)   
function isInString(const ch: Char; const s: String): Boolean;
var i: Integer;
begin
  Result := False;
  for i := 1 to Length(s) do begin
    Result := s[i] = ch;
    if Result then Break;
  end;
end;

function URLEncode(const ASrc: String): String;
var
  i: Integer;
  SafeChars: String;
begin
  Result := '';
  SafeChars := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  for i := 1 to Length(ASrc) do begin
    if not isInString( ASrc[i], SafeChars ) then begin
      Result := Result + '%' + IntToHex(Ord(ASrc[i]), 2);
    end else begin
      Result := Result + ASrc[i];
    end;
  end;
end;

var
  v: string;
  e: string;
begin
  v := 'kd3/sd+asi adf';
  e := URLEncode(v);

  writeln(e);

  ResultURL :=
    'http://' + Chr(Ord('a') + Random(3)) + '.tile.openstreetmap.org/' +
    IntToStr(GetZ-1) + '/' + IntToStr(GetX) + '/' + IntToStr(GetY) + '.png';

  RequestHead :=
    'User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0' + #13#10 +
    'Referer: https://www.openstreetmap.org/' + #13#10 +
    'Cookie: ' + e + #13#10 +
    'Accept: image/webp,*/*';
end.
GetUrlScript_Error.txt (1,174 bytes)   

Activities

aflexus

21-08-2019 21:50

reporter   ~0019280

Сообщение поломалось немного, но думаю, и из контекста понятно :)
RequestHead := 'Data:' + e + 0000013#10...

zed

21-08-2019 22:53

manager   ~0019281

Может ваша функция URLEncode просто не работает? Покажите исходник?

Записал в скрипте строку:

RequestHead := 'Data: ' + 'kd3%2Fsd%2Basi%20adf'

отправилось как и положено (смотрел в wireshark). Что в общем-то не удивительно, т.к. никаких дополнительных обработок заголовков не выполняется.

aflexus

21-08-2019 22:56

reporter   ~0019282

function URLEncode(const ASrc: String): String;
    var i: Integer;
        SafeChars: String;
    begin
        Result := '';
        SafeChars := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        for i := 1 to Length(ASrc) do begin
            if not isInString( ASrc[i], SafeChars ) then begin
                Result := Result + '%' + IntToHex(Ord(ASrc[i]), 2);
            end else begin
                Result := Result + ASrc[i];
            end;
        end;
    end;

aflexus

21-08-2019 22:58

reporter   ~0019283

Last edited: 21-08-2019 22:59

При этом, если сделать SaveToLocalFile(dbg_file, URLEncode(v));
То в файл сохранится так, как надо.

zed

21-08-2019 22:59

manager   ~0019284

isInString?

aflexus

21-08-2019 22:59

reporter   ~0019285

Ну это банально:

function isInString(const ch: Char; const s: String): Boolean;
    var i: Integer;
    begin
        Result := False;
        for i := 1 to Length(s) do begin
            Result := s[i] = ch;
            if Result then Break;
        end;
    end;

zed

21-08-2019 23:08

manager   ~0019286

> Ну это банально
Это понятно, но мне же надо воспроизвести ваш кейс, а не написать свой вариант, который может работать (в отличии от вашего).

Приложил скрипт (взял за основу OSM Mapnik), у меня он работает как надо. И в Pascal Script IDE пишет всё как надо и в сеть уходит закодированная строка.

zed

21-08-2019 23:10

manager   ~0019287

Чем вы смотрите заголовки при передаче в сеть? Покажите ваш скрипт целиком, может там ошибка и вместо одной переменной вы отправляете другую?

aflexus

21-08-2019 23:27

reporter   ~0019288

Last edited: 21-08-2019 23:51

Все дело в имени параметра - "Cookie" :) Именно с ним переменная почему-то декодируется.

Скриншот приложил.

И добавил GetUserScript - который не работает.

Спасибо огромное за помощь!

Теперь получилось повторить поведение?

zed

22-08-2019 09:13

manager   ~0019291

Да, с куками получилось. Похоже на баг в используемом компоненте - при установке заголовков он автоматически декодирует поле Cookie и впоследствии в таком виде и отправляет в интернет. Сделал заглушку, чтобы такого не происходило. В следующей ночной версии куки будут уходить в том же виде, что и были установлены в скрипте.

aflexus

22-08-2019 17:26

reporter   ~0019295

Супер! Благодарю за оперативность!

Issue History

Date Modified Username Field Change
21-08-2019 21:25 aflexus New Issue
21-08-2019 21:50 aflexus Note Added: 0019280
21-08-2019 22:42 zed Steps to Reproduce Updated
21-08-2019 22:53 zed Note Added: 0019281
21-08-2019 22:54 zed Status new => feedback
21-08-2019 22:56 aflexus Note Added: 0019282
21-08-2019 22:56 aflexus Status feedback => new
21-08-2019 22:58 aflexus Note Added: 0019283
21-08-2019 22:59 aflexus Note Edited: 0019283
21-08-2019 22:59 zed Note Added: 0019284
21-08-2019 22:59 aflexus Note Added: 0019285
21-08-2019 23:05 zed File Added: GetUrlScript.txt
21-08-2019 23:06 zed File Added: Screenshot_1.png
21-08-2019 23:08 zed Note Added: 0019286
21-08-2019 23:10 zed Note Added: 0019287
21-08-2019 23:26 aflexus File Added: Image 1.png
21-08-2019 23:27 aflexus Note Added: 0019288
21-08-2019 23:28 aflexus Note Edited: 0019288
21-08-2019 23:30 aflexus Note Edited: 0019288
21-08-2019 23:38 aflexus File Added: GetUrlScript_Error.txt
21-08-2019 23:39 aflexus Note Edited: 0019288
21-08-2019 23:51 aflexus Note Edited: 0019288
22-08-2019 09:13 zed Note Added: 0019291
22-08-2019 09:17 zed Status new => resolved
22-08-2019 09:17 zed Resolution open => fixed
22-08-2019 09:17 zed Product Version => 190707
22-08-2019 09:17 zed Fixed in Version => 191221
22-08-2019 09:17 zed Target Version => 191221
22-08-2019 09:17 zed Summary GetScript.txt: отправка через RequestHead строки закодированной в URLEncode() - ошибка. => Не удаётся отправить Cookie заданные в RequestHead в закодированном виде
22-08-2019 09:18 zed Assigned To => zed
22-08-2019 09:18 zed Status resolved => assigned
22-08-2019 09:18 zed Status assigned => resolved
22-08-2019 17:26 aflexus Note Added: 0019295
22-08-2019 17:26 aflexus Status resolved => closed
22-08-2019 17:52 zed Summary Не удаётся отправить Cookie заданные в RequestHead в закодированном виде => Не удаётся отправить Cookie в закодированном виде
22-08-2019 17:56 vdemidov Priority high => normal
22-08-2019 17:56 vdemidov Severity major => minor
22-08-2019 17:56 vdemidov Status closed => resolved
08-08-2025 13:22 zed Category Баг => Баг / Bug