SASGIS - SAS.Планета
View Issue Details
0003550SAS.Планета[All Projects] Багpublic21-08-2019 21:2530-08-2019 13:57
aflexus 
zed 
normalminoralways
resolvedfixed 
190707 
191221191221 
0003550: Не удаётся отправить Cookie в закодированном виде
GetScript.txt

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

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

   v := 'kd3/sd+asi adf';
   e := URLEncode(v); // -> 'kd3%2Fsd%2Basi%20adf'

И вот если сделать запрос с таким вот заголовком:

   RequestHead := 'Data: e + 0000013#10';

То на самом деле отправится декодированная ('kd3/sd+asi adf') переменная.
No tags attached.
txt GetUrlScript.txt (1,186) 21-08-2019 23:05
https://bugtracker.sasgis.org/file_download.php?file_id=2343&type=bug
png Screenshot_1.png (62,066) 21-08-2019 23:06
https://bugtracker.sasgis.org/file_download.php?file_id=2344&type=bug
png

png Image 1.png (43,129) 21-08-2019 23:26
https://bugtracker.sasgis.org/file_download.php?file_id=2345&type=bug
png

txt GetUrlScript_Error.txt (1,174) 21-08-2019 23:38
https://bugtracker.sasgis.org/file_download.php?file_id=2346&type=bug
Issue History
21-08-2019 21:25aflexusNew Issue
21-08-2019 21:50aflexusNote Added: 0019280
21-08-2019 22:42zedSteps to Reproduce Updatedbug_revision_view_page.php?rev_id=7457#r7457
21-08-2019 22:53zedNote Added: 0019281
21-08-2019 22:54zedStatusnew => feedback
21-08-2019 22:56aflexusNote Added: 0019282
21-08-2019 22:56aflexusStatusfeedback => new
21-08-2019 22:58aflexusNote Added: 0019283
21-08-2019 22:59aflexusNote Edited: 0019283bug_revision_view_page.php?bugnote_id=19283#r7459
21-08-2019 22:59zedNote Added: 0019284
21-08-2019 22:59aflexusNote Added: 0019285
21-08-2019 23:05zedFile Added: GetUrlScript.txt
21-08-2019 23:06zedFile Added: Screenshot_1.png
21-08-2019 23:08zedNote Added: 0019286
21-08-2019 23:10zedNote Added: 0019287
21-08-2019 23:26aflexusFile Added: Image 1.png
21-08-2019 23:27aflexusNote Added: 0019288
21-08-2019 23:28aflexusNote Edited: 0019288bug_revision_view_page.php?bugnote_id=19288#r7461
21-08-2019 23:30aflexusNote Edited: 0019288bug_revision_view_page.php?bugnote_id=19288#r7462
21-08-2019 23:38aflexusFile Added: GetUrlScript_Error.txt
21-08-2019 23:39aflexusNote Edited: 0019288bug_revision_view_page.php?bugnote_id=19288#r7463
21-08-2019 23:51aflexusNote Edited: 0019288bug_revision_view_page.php?bugnote_id=19288#r7464
22-08-2019 09:13zedNote Added: 0019291
22-08-2019 09:17zedStatusnew => resolved
22-08-2019 09:17zedResolutionopen => fixed
22-08-2019 09:17zedProduct Version => 190707
22-08-2019 09:17zedFixed in Version => 191221
22-08-2019 09:17zedTarget Version => 191221
22-08-2019 09:17zedSummaryGetScript.txt: отправка через RequestHead строки закодированной в URLEncode() - ошибка. => Не удаётся отправить Cookie заданные в RequestHead в закодированном виде
22-08-2019 09:18zedAssigned To => zed
22-08-2019 09:18zedStatusresolved => assigned
22-08-2019 09:18zedStatusassigned => resolved
22-08-2019 17:26aflexusNote Added: 0019295
22-08-2019 17:26aflexusStatusresolved => closed
22-08-2019 17:52zedSummaryНе удаётся отправить Cookie заданные в RequestHead в закодированном виде => Не удаётся отправить Cookie в закодированном виде
22-08-2019 17:56vdemidovPriorityhigh => normal
22-08-2019 17:56vdemidovSeveritymajor => minor
22-08-2019 17:56vdemidovStatusclosed => resolved

Notes
(0019280)
aflexus   
21-08-2019 21:50   
Сообщение поломалось немного, но думаю, и из контекста понятно :)
RequestHead := 'Data:' + e + 0000013#10...
(0019281)
zed   
21-08-2019 22:53   
Может ваша функция URLEncode просто не работает? Покажите исходник?

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

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

отправилось как и положено (смотрел в wireshark). Что в общем-то не удивительно, т.к. никаких дополнительных обработок заголовков не выполняется.
(0019282)
aflexus   
21-08-2019 22:56   
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;
(0019283)
aflexus   
21-08-2019 22:58   
(edited on: 21-08-2019 22:59)
При этом, если сделать SaveToLocalFile(dbg_file, URLEncode(v));
То в файл сохранится так, как надо.

(0019284)
zed   
21-08-2019 22:59   
isInString?
(0019285)
aflexus   
21-08-2019 22:59   
Ну это банально:

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;
(0019286)
zed   
21-08-2019 23:08   
> Ну это банально
Это понятно, но мне же надо воспроизвести ваш кейс, а не написать свой вариант, который может работать (в отличии от вашего).

Приложил скрипт (взял за основу OSM Mapnik), у меня он работает как надо. И в Pascal Script IDE пишет всё как надо и в сеть уходит закодированная строка.
(0019287)
zed   
21-08-2019 23:10   
Чем вы смотрите заголовки при передаче в сеть? Покажите ваш скрипт целиком, может там ошибка и вместо одной переменной вы отправляете другую?
(0019288)
aflexus   
21-08-2019 23:27   
(edited on: 21-08-2019 23:51)
Все дело в имени параметра - "Cookie" :) Именно с ним переменная почему-то декодируется.

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

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

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

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

(0019291)
zed   
22-08-2019 09:13   
Да, с куками получилось. Похоже на баг в используемом компоненте - при установке заголовков он автоматически декодирует поле Cookie и впоследствии в таком виде и отправляет в интернет. Сделал заглушку, чтобы такого не происходило. В следующей ночной версии куки будут уходить в том же виде, что и были установлены в скрипте.
(0019295)
aflexus   
22-08-2019 17:26   
Супер! Благодарю за оперативность!