Неправильно отрабатывает компонент TIdHTTP в Delphi
При парсинге HTML на Delphi заметил такой косяк, метод GET возвращает не весь HTML: когда искал нужные ноды не смог их найти в дереве DOM, начал исследовать и обнаружил пропажу. Если зайти на сайт и сохранить страницу ручками - разница размера с результатом TIdHTTP - более чем в 2 раза.
Мой код:
function GetWebPage(const url: string): string;
const
agent = 'Mozilla/5.0 (iPad; CPU OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Mobile/15E148 Safari/604.1';
var
SSL: TIdSSLIOHandlerSocketOpenSSL;
HTTP: TIdHTTP;
begin
HTTP := TIdHTTP.Create;
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
SSL.SSLOptions.Method := sslvTLSv1_2;
SSL.SSLOptions.SSLVersions := [sslvTLSv1_2];
HTTP.IOHandler := SSL;
HTTP.HandleRedirects := True;
HTTP.Request.Accept := 'text/html';
HTTP.Request.ContentType := 'text/html';
HTTP.Request.UserAgent := agent;
Result := HTTP.Get(url).Trim;
finally
HTTP.Free;
SSL.Free;
end;
end;
Ответ из HTTP.Response:
ResponseCode: 200 ResponseText: HTTP/1.1 200 OK
Server: cloudflare
CacheControl: no-cache, no-store, must-revalidate
CharSet: utf-8
Connection: keep-alive
ContentType: text/html
TransferEncoding: chunked
GetNamePath: TIdHTTPResponse
Подскажите, может я где допустил ошибку, или подскажите через какой компонент (под Delphi) лучше делать GET запросы.
Ответы (1 шт):
Автор решения: Vlad Chapl
→ Ссылка
- Вполне вероятно ты спотыкаешься о защиту Cloudflare. В интенрете ищем "web scraping cloudflare".
- Возможно DOM модель достраивается динамически при помощи JavaScript. Попробуй в браузере сохранить страницу. (Вроде это не твой случай.)
P.S. https://habr.com/ru/articles/716434/ "Chrome Headless против cloudflare JS challenge"