Indy изменяет двоичные данные в моем URL - PullRequest
3 голосов
/ 19 апреля 2011

Я хочу отправить некоторые двоичные данные через GET с использованием компонентов Indy. Итак, у меня есть URL-адрес, например www.awebsite.com/index.php?data=xxx, где xxx - двоичные данные, закодированные с использованием функции ParamsEncode. После кодирования двоичные данные преобразуются во что-то вроде bB7%18%11z\, поэтому мой URL выглядит примерно так: www.awebsite.com/bB7%18%11z\

Я видел, что если мой URL-адрес содержит символ обратного свечения (см. Последний символ в URL-адресе), он заменяется символом косой черты (/) в TIdURI.NormalizePath, поэтому мои двоичные данные повреждены. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 19 апреля 2011

Обратные косые черты не разрешены в URL, и во избежание путаницы между системами Windows и * nix все обратные косые черты заменяются косыми чертами, чтобы попытаться сохранить работоспособность. См. http://www.faqs.org/rfcs/rfc1738.html раздел 5, HTTP, httpurl

Вы можете попробовать заменить обратную косую черту на %5C самостоятельно.

Тем не менее, вы должны либо попытаться использовать кодировку MIME, либо попытаться получить зависание POST-запросов.

2 голосов
/ 19 апреля 2011

Вы используете старую версию Indy.Обратные косые черты включены в список UnsafeChars, который Indy использует сейчас.Реми изменил его в июле 2010 года с ревизией 4272 в ветке Tiburon:

r4272 |Инди-РемиЛебо |2010-07-07 03:12:23 -0500 (ср, 07 июл 2010) |1 строка

Изменена внутренняя логика для TIdURI и перемещена некоторая разделяемая логика в IdGlobalProtocols.pas для последующего использования в TIdHTTP.

Она была объединена с внешней частью Indy 10.5.7 с редакцией 4394, сентябрь 2010 года.

...