Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Мой разложившийся мозг сопротивляется. Сковзь пелену галлюцинаций, где где меня имеют сразу несколько волосатых таджиков, отчетливо пробивается реклама. Ее много. Очень много. Реклама и навязчивые видео с предложениями "срубить бабла" даже страшнее галлюцинаций. Я написал простой фильтр, заключающийся в локальном сервере, к которому я подключаюсь из браузера. Сервер является точкой доступа. Неугодные запросы я буду отпиздовывать на корню.
Собственно, этот код я запостил как фикс досадного гълюка, заключающегося в том, что браузер посылает нахой поле charset. Это херит даже код html.
Кодировку следует указывать в поле "КонтентТипе"
Он использует программу, написанную на «Delphi» с применением библиотеки «Indy» в качестве прокси-сервера. Вот описание этого монстра: https://ru.wikipedia.org/wiki/Internet_Direct
Если я правильно понял, то «Indy» в качестве клиента разбирает пришедший от сервера заголовок «Content-Type: text/html; charset=utf-8» на поля aresponseinfo.CharSet (в нём в данном примере будет лежать «utf-8») и aresponseinfo.ContentType (в нём будет лежать мимими-тип без чарсета).
«Indy» же в качестве сервера обратно собрать комбинированный «Content-Type» не может. Он отправляет клиенту заголовок «Content-Type», составленный исключительно из aresponseinfo.ContentType (например, «Content-Type: text/html»). Чтобы отправить чарсет, нужно составить комбинированный заголовок самостоятельно, как в этом примере:
Вот тут по идее должно добавлять (только почему-то слово CHARSET заглавными, да ещё и сам чарсет в кавычках):
unit IdText;
...
const
SContentType = '%s; CHARSET="%s"'; {do not localize}
...
procedure TIdText.SetContentType(const AValue: string);
begin
inherited SetContentType(Format(SContentType, [AValue,GetCharSet(Headers.Values['Content-Type'])])); {do not localize}
end;
В RFC2616 же такое определение:
charset = token
И пример:
Content-Type: text/html; charset=ISO-8859-4
Значит, «Indy» отправляет чарсет, но в кавычках, и именно из-за кавычек браузеры не могут его распознать.
Какой анскилл )))
До кучи: в «Indy» наследование реализации во все поля. Слово «inherited» (вызов неявного родителя) чуть ли не в каждом методе. Голову сломаешь, пока разберёшься, код из предка какого поколения реально используется в методе.
https://ru.wikipedia.org/wiki/Internet_Direct
Если я правильно понял, то «Indy» в качестве клиента разбирает пришедший от сервера заголовок «Content-Type: text/html; charset=utf-8» на поля aresponseinfo.CharSet (в нём в данном примере будет лежать «utf-8») и aresponseinfo.ContentType (в нём будет лежать мимими-тип без чарсета).
«Indy» же в качестве сервера обратно собрать комбинированный «Content-Type» не может. Он отправляет клиенту заголовок «Content-Type», составленный исключительно из aresponseinfo.ContentType (например, «Content-Type: text/html»). Чтобы отправить чарсет, нужно составить комбинированный заголовок самостоятельно, как в этом примере:
А буквы «ID» в названиях классов подтвердили догадку.
В RFC2616 же такое определение: И пример:
Значит, «Indy» отправляет чарсет, но в кавычках, и именно из-за кавычек браузеры не могут его распознать.
Какой анскилл )))
До кучи: в «Indy» наследование реализации во все поля. Слово «inherited» (вызов неявного родителя) чуть ли не в каждом методе. Голову сломаешь, пока разберёшься, код из предка какого поколения реально используется в методе.