Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
1

Загрузка части страницы

12.03.2015, 19:11. Показов 2438. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется снять значение с заголовка страницы-
HTML5
1
<title>Название страницы</title>
Качать всю страницу не имеет смысла, так как она очень большая и мне нужно будет снимать названия страниц в цикле.
Слышал вроде через синапс можно превать загрузку страницы на нужном месте, можно ли подобное через idHttp?
Как реализовать подобную затею, ваши идеи?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2015, 19:11
Ответы с готовыми решениями:

Загрузка части страницы с задержкой
Страница состоит из 2х частей. 1) Половина обычный html код (шапка, боковая панель, часть...

Загрузка части другой страницы
Здравствуйте. Нужно на странице реализовать загрузку другой страницы не всей а только её части. И...

загрузка определенной части html страницы?
Всем привет, есть таблица чемпионата по футболу на спортивном портале, вокруг этой таблицы баннеры,...

Загрузка части страницы в зависимости от размера экрана
Есть блок кода который должен выводится при просмотре страницы на больших экранах. Но он не...

24
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
12.03.2015, 19:35 2
idHTTP.head()
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 20:30  [ТС] 3
krapotkin,
Неработает. Мне только название страницы нужно скачать.
Delphi
1
 Memo1.Text:= IdHTTP1.head('https://www.cyberforum.ru/'); //нерабочий код
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
12.03.2015, 20:49 4
сорри
не проверил
тогда только вот так
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.b1Click(Sender: TObject);
var
  Range: TIdEntityRange;
const
  URL='https://www.cyberforum.ru/';
begin
  Range := IdHTTP1.Request.Ranges.Add;
  Range.StartPos := 0;
  Range.EndPos := 1000;
  m1.Lines.text:=IdHTTP1.Get(URL);
end;
0
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
12.03.2015, 20:51 5
Посмотрите тут
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 20:59  [ТС] 6
krapotkin,
На 3 строке не компилируется. Млжет что в usus добавить?
0
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,162
12.03.2015, 21:00 7
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Memo1.Text:= IdHTTP1.head('https://www.cyberforum.ru/'); //нерабочий код
Код рабочий, только ты не правильно его используешь
Delphi
1
2
IdHTTP1.Head('https://www.cyberforum.ru/');
  Memo1.Lines := IdHTTP1.Response.RawHeaders;
Но это совсем не то, что тебе нужно.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
12.03.2015, 21:03 8
RawHeaders не дает <title>

uses IdHTTPHeaderInfo
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 21:16  [ТС] 9
БогДелфей,
Код отработал но он мне непоказал что находится тут <title>Название страницы</title>

Нуж-то сандартного способа нету получить заголовок страницы?
Грузить полстраницы и парсить что-ль или как?
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
12.03.2015, 21:21 10
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Нуж-то сандартного способа нету получить заголовок страницы?
Нет. И быть не может. По крайней мере в текущих версиях http
1
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 21:39  [ТС] 11
mss,
О как плохо-то, я думал сейчас в пару строк типа таких сделаю.

IdHTTP1.Title..........

А так прийдется изобретать велосипед...
Сайт (исходный код страницы) содержит 600 строк, нужная мне информация на 20 строке, 580 строк остальных мне вобще ненужны!
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
12.03.2015, 21:49 12
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
нужная мне информация на 20 строке
Сегодня на 20-й, завтра на 1-й, послезавтра на столохматой..
При этом просматривая эту страницу в браузере никаких видимых изменений ты не увидишь.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
12.03.2015, 22:00 13
хм, интересно, что вопреки документации, ranges ни фига не срабатывают
качает все целиком
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 22:03  [ТС] 14
mss, Мне скорость важна.
Видел где- то в гугле код, загружаем 1 килобайт информации и закрываем IdHTTP соединение.
Так вот там такой код был, строк 15 не меньше, на события IdHTTP1Work, IdHTTP1WorkBegin и еще какие-то.
Затем разрыв соединия каким то образом делался.
Вобщем нужно делать так же.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
12.03.2015, 22:07 15
nestquik2 дал ссылку там именно так
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
12.03.2015, 22:14 16
Цитата Сообщение от krapotkin Посмотреть сообщение
ranges ни фига не срабатывают
качает все целиком
и не обязан
по двум причинам
1. не всякий сервер поддерживает докачку документов
2. к документам, получение которых может потребовать транссеансовую докачку, относятся только файловые ресурсы

Добавлено через 6 минут
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
загружаем 1 килобайт информации и закрываем IdHTTP соединение
Ну загрузил ты этот килобайт, полез в него искать титл - и не нашел)
И что, по-новой запускать tcp/http-сессию ? текущую-то ты уже закрыл)
Запустил новую, прочитал теперь 2 кб, закрыл - и опять там не оказалось титла ..

Сказка про белого бычка получается)

Нужно читать заголовок Content-Length и на уровне tcp читать небольшими порциями контент-стрим документа, аккумулируя его и на лету анализируя на предмет обнаружения титла, пока размер стрима не превысит Content-Length.
Как только титл будет обнаружен, лавочку можно будет тут же закрыть.
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 22:55  [ТС] 17
nestquik2,
В делфи Delphi 2010 еще отработал кое как пример и то такое ощущение что неправильно, он грузил одно и тоже количество данных хотя я менял строку if AWorkCount > 1024 then. а в Delphi - 7 ошибка.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
  try
    Memo1.Lines.Text := IdHTTP1.Get('http://www.webdelphi.ru');
  except
    on E: EIdConnClosedGracefully do
      ShowMessage('Сработало исключение EIdConnClosedGracefully');
    on E: EIdException do
      ShowMessage('Сработало другое исключение Indy (EIdException)');
  end;
end;
 
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
var
  S: TStringStream;
begin
  if AWorkCount > 1024 then
  begin
    S := TStringStream.Create;  //ошибка здесь
    try
      S.LoadFromStream(TIdHTTP(ASender).Response.ContentStream); //получили текст
      Memo1.Lines.LoadFromStream(S); //вывели в Memo
    finally
      TIdHTTP(ASender).Socket.Close; //в любом случае закрыли соединение
      S.Free;
    end;
  end;
end;
 
end.
Миниатюры
Загрузка части страницы  
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 22:59  [ТС] 18
krapotkin,
И вот еще в чем проблема то, IdHTTP зависает (блокирует другие действия) пока незагрузит страницу полностью, то есть я имею ввиду загрузку большой страницы тогда что в поток поставить? Ну поставлю я в поток, а дальше сто делать?
У меня на деллфи- 7 тот ваш код не откомпилировался все равно, нужно искать какие- то еще решения.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
12.03.2015, 23:04 19
на основании вышеизложенного там будет просто s:=IdHTTP1.get(URL) и поиск в полученной строке
думаю, он ничем не отличается от новых версий
то, что надо в поток выносить - это обсасывалось тут тыщу раз
поток - чтобы программа не "замерзала"
можно 5 штук запустить, программа пока кнопочки порисует на экране
на выходе из потока в OnTerminate обрабатываем то, что пришло...
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
12.03.2015, 23:12  [ТС] 20
krapotkin, Пишу такой код:
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
   Caption:= IntToStr(AWorkCount);
 
      if AWorkCount > 500 then
     Exit;
end;
И вобщем да загрузка и прочий код останавливается, но останавлиется когда страница полностью загружена!
Даже в потоке этот же код прерывания загрузки не дал. Вобщем пока неотработал ни один код, я уже и незнаю что еще можно сделать?
0
12.03.2015, 23:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2015, 23:12
Помогаю со студенческими работами здесь

HTTPHandler: загрузка страницы, а фото с этой страницы загружать с локальной папки
нужен HTTPHandler который загружал страницу а фотки из этой странице загружалась с локальной папки...

Загрузка данных из другой страницы без перезагрузки основной страницы
Не знаю в правильной ли ветке я задаю вопрос. Ответьте пожалуйста как сделать чтобы при нажатии,...

Загрузка табличной части
Всем привет. Возможно ли загрузить табличную часть одного документа (ранее созданного и...

Загрузка изображения и разбитие на части
У меня есть &quot;пазл&quot;, там изображение берется из указанного пути, т.е. в корне лежит какое-либо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru