Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Неправильно отрабатывает компонент TIdHTTP в Delphi

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

keon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


 
При парсинге 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 запросы.
 


Всего записей: 164 | Зарегистр. 21-12-2006 | Отправлено: 21:09 05-11-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
keon
1) зачем создали новую тему, а не спросили в предыдущей?
2)
Цитата:
Server: cloudflare

у вас не получится вот так сделать запрос, потом что у CloudFlare есть защита от ботов.
https://ru.wikipedia.org/wiki/Cloudflare
3) нужно сравнивать не размер, а содержимое

Всего записей: 15121 | Зарегистр. 20-09-2014 | Отправлено: 22:06 05-11-2023 | Исправлено: Mavrikii, 22:10 05-11-2023
keon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
1) зачем создали новую тему, а не спросили в предыдущей?

потому что это разные темы, а не личный чатик
 

Цитата:
3) нужно сравнивать не размер, а содержимое

сравнение по содержимому не возможно, конечная страница генерируется динамически, некоторые блоки меняют свое расположение, появляются пустоты и т.д., страница отличается от предыдущей на считанные килобайты. Например при ручном сохранении в файле 1500+ строк и размер 780к, а если сохранять через GET то размер 380к, но строк под 4к...кароче винегрет
 
я переписал запрос к странице через THttpClient, не знаю на сколько он лучше работает. но по крайне мере нужные мне теги по ID и CLASS я нахожу, далее практика покажет.  
Пока через HttpClient отпала необходимость в SSL библиотеках, картинки также дергает и довольно резво.

Всего записей: 164 | Зарегистр. 21-12-2006 | Отправлено: 22:53 05-11-2023
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Неправильно отрабатывает компонент TIdHTTP в Delphi


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru