0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
http:tidhttp;
ss:tstringstream;
begin
try
http:=tidhttp.Create(nil);
http.CookieManager:=tIdcookiemanager.Create(nil);
http.HandleRedirects:=true;
http.AllowCookies:=True;
http.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; rv:56.0) Gecko/20100101 Firefox/56.0';
http.IOHandler:=tidssliohandlersocketopenssl.Create(nil);
http.Compressor:=tidcompressorzlib.Create(nil);
http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
http.Request.AcceptEncoding:='gzip, deflate';
SS:=tstringstream.Create;
HTTP.Get(ARequestInfo.URI, SS);
aresponseinfo.CharSet:=http.Response.CharSet;
aresponseinfo.ContentType:=http.Response.ContentType+'; '+'charset='+http.Response.CharSet+';';
aresponseinfo.ContentStream:=SS;
AResponseInfo.WriteContent;
except
end;
end;
Мой разложившийся мозг сопротивляется. Сковзь пелену галлюцинаций, где где меня имеют сразу несколько волосатых таджиков, отчетливо пробивается реклама. Ее много. Очень много. Реклама и навязчивые видео с предложениями "срубить бабла" даже страшнее галлюцинаций. Я написал простой фильтр, заключающийся в локальном сервере, к которому я подключаюсь из браузера. Сервер является точкой доступа. Неугодные запросы я буду отпиздовывать на корню.
Собственно, этот код я запостил как фикс досадного гълюка, заключающегося в том, что браузер посылает нахой поле charset. Это херит даже код html.
Кодировку следует указывать в поле "КонтентТипе"
пожалуй, всё. пока.
Запостил: AnalBoy,
30 Декабря 2019
Rooster 30.12.2019 07:32 # +2
HoBorogHuu_nemyx 30.12.2019 07:49 # +3
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»). Чтобы отправить чарсет, нужно составить комбинированный заголовок самостоятельно, как в этом примере:
Rooster 30.12.2019 08:02 # +1
HoBorogHuu_nemyx 30.12.2019 09:15 # +1
А буквы «ID» в названиях классов подтвердили догадку.
Rooster 30.12.2019 14:23 # +1
HoBorogHuu_nemyx 30.12.2019 10:10 # +3
В RFC2616 же такое определение: И пример:
Значит, «Indy» отправляет чарсет, но в кавычках, и именно из-за кавычек браузеры не могут его распознать.
Какой анскилл )))
До кучи: в «Indy» наследование реализации во все поля. Слово «inherited» (вызов неявного родителя) чуть ли не в каждом методе. Голову сломаешь, пока разберёшься, код из предка какого поколения реально используется в методе.
guestinxo 30.12.2019 11:08 # −3
HoBorogHuu_nemyx 30.12.2019 12:51 # −3
Rooster 30.12.2019 14:22 # −2
N_BCE_3ACMERJINCb 30.12.2019 22:57 # −2