Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
1

Сохранение HTML кода страницы.

25.07.2009, 12:27. Показов 8088. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как можно без TWebBrowser сохранить HTML код WEB страницы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2009, 12:27
Ответы с готовыми решениями:

Как сохранить часть HTML кода с веб страницы?
Веб-страница с результатами поиска, к примеру 50 ссылок. Мне нужно сохранить все ссылки. Открываю...

Как запретить сохранение страницы и просмотр HTML кода?
Подскажите, как запретить соранение страницы и просмотр HTML кода?

Сохранение HTML кода в html файл c использыванием php
Я создавал регистрацию на php+html+css . Сделал форму (она под спойлером ) <div...

Сохранение html страницы
Добрый день, не могу никак понять почему не сохраняет html страницу в chrome <script...

25
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.07.2009, 14:03 2
Загляни сюда:
Связь с интернетом
В этой теме рассматривалось то, как скачать страницу с нета и извлечь оттуда информацию. Должно помочь.
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
25.07.2009, 14:34  [ТС] 3
Что то там мутный исходник.
Можно и с TWebBrowser, Только мне нужно реализовать много поточность запросов.
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.07.2009, 15:30 4
Даже и не знаю как с WebBrowser. А ничего мутного в том исходнике нет. Идет последоватеьность InternetOpen,InternetOpenUrl, InternetReadFile(эти функции инкапсулированы в класс TInetFile). Достаточно все просто.
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
25.07.2009, 19:08  [ТС] 5
Цитата Сообщение от Otaka Посмотреть сообщение
Даже и не знаю как с WebBrowser. А ничего мутного в том исходнике нет. Идет последоватеьность InternetOpen,InternetOpenUrl, InternetReadFile(эти функции инкапсулированы в класс TInetFile). Достаточно все просто.
Можите пожалуйста привести пример, простого сохранения HTML кода в TStringList или аналогичному ему типу.
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.07.2009, 19:27 6
Вот тебе пример небольшой программы качалки. Очень просто. Тока я там сохраняю в файл.
Вложения
Тип файла: rar Downloader.rar (13.1 Кб, 235 просмотров)
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
25.07.2009, 21:36  [ТС] 7
C++
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
void TForm1::GetHtmlCode(AnsiString Url)
 {
TInetFile*f=new TInetFile();
f->OpenFile(Url.c_str());
int b=8;
char buff[2048];
TFileStream*ef=new TFileStream(Url,fmCreate);
try
{
while(b>0)
        {
        b=f->Read(buff,2048);
        ef->Write(buff,b);
        Application->ProcessMessages();
        }
}catch(...)
        {
        ShowMessage("Ошибка");
        delete f;
        delete ef;
 
        }
delete f;
delete ef;
 Label1->Caption = buff[1];
 //
 }
Вот написал такую процедуру, не компилируется, что я делаю не так???
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.07.2009, 22:03 8
Ну, когда спрашиваешь об ошибке, копируй сюда то, что сообщает тебе компилятор.
Скорей всего, тебе надо сделать Project/Add to project/(найди в каталоге с билдером папку lib, а там wininet.lib её и добавь).
А еще у тебя открывается файл где-то в сети с таким вот Url, а потом ты пытаешься создать файл на своем компе с путем Url. Как так?
Нужно:
C++
1
2
3
4
5
6
void TForm1::GetHtmlCode(AnsiString Url,AnsiString path)
{
...
TFileStream*ef=new TFileStream(path,fmCreate);
...
}
1
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
26.07.2009, 15:28  [ТС] 9
Спасибо всё работает.
Ещё один вопрос может правда не в тему.
Как использовать прокси в єтом алгоритме?
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.07.2009, 15:52 10
В TInetFile стоит параметр INTERNET_OPEN_TYPE_PRECONFIG, поэтому, вроде как, если выставлены настройки прокси сервера в ИнетЕксплорере, то должно работать сразу же. Не знаю, не пробовал. Нужно играться с параметрами функции InternetOpen
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
26.07.2009, 16:11  [ТС] 11
Мне просто нужно по ходу выполнения программы менять прокси.
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.07.2009, 16:45 12
Вот каким должен быть вызов InternetOpen:
C++
1
2
3
4
HINTERNET session = InternetOpen("Our Agent", 
  INTERNET_OPEN_TYPE_PROXY, 
  "192.168.0.1:3128", /* наш прокси 192.168.0.1 порт 3128 */
  "", 0);
Только что делать, если прокси требует авторизации я не знаю.
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
26.07.2009, 19:28  [ТС] 13
Как то так???
C++
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
void TForm1::GetHtmlCode(AnsiString Url)
 {
 
 HINTERNET session = InternetOpen("Our Agent",
INTERNET_OPEN_TYPE_PROXY,"38.101.238.64:80","", 0);
 TInetFile*f=new TInetFile();
f->OpenFile(Url.c_str());
 
int b=8;
char buff[1000000];
try
{
while(b>0)
        {
        b=f->Read(buff,1000000);
        Application->ProcessMessages();
        }
}catch(...)
        {
        ShowMessage("Ошибка");
        delete f;
    }
delete f;
 
 Memo1->Lines->Text = buff;
 
 //
 }
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.07.2009, 21:19 14
Нет, ты посмотри реализацию TInetFile, функция OpenFile.
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
27.07.2009, 03:47  [ТС] 15
Не допру я никак.

Добавлено через 6 часов 21 минуту 6 секунд
Дошло .
C++
1
2
3
4
5
6
HINTERNET file;
file = InternetOpen("Our Agent", PRE_CONFIG_INTERNET_ACCESS, 0, 0, 0);
file = InternetOpenUrl(file, Url.c_str(), 0, 0, 0, 0);
char buf[64000];
unsigned long len;
 InternetReadFile(file, buf, sizeof(buf), &len);
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
01.08.2009, 16:25  [ТС] 16
А как можно узнать когда страница уже загружена?
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
01.08.2009, 16:48 17
Ну, вроде как длина контента определяется вот так:
C++
1
2
3
4
5
6
///class TInetFile
...
if(HttpQueryInfo(hUrl, HTTP_QUERY_CONTENT_LENGTH, buffer, &buflen, &index))
        {
        FSize=StrToInt(buffer);
        }
Но сервер не всегда дает размеры фалйов, а размеры страничек возвращаются вообще редко. Я всегда делел так- читаешь, читаешь, читаешь, и когда уже ничего не приходит(InternetReadFile возвращает 0), тогда, наверное, это конец файла. Но такой способ работает только когда есть нормальный нет, а если страница грузится оочень меделенно, то 0 может возвратится и по истечению определенного тайм-аута.
Не знаю.
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
02.08.2009, 14:15  [ТС] 18
C++
1
2
3
4
5
6
7
8
9
10
char buf[6400000];
//----------------------------------------------------------------------
HINTERNET file;
file = InternetOpen("Our Agent", PRE_CONFIG_INTERNET_ACCESS, 0, 0, 0);
file = InternetOpenUrl(file, Url.c_str(), 0, 0, 0, 0);
unsigned long len;
 InternetReadFile(file, buf, sizeof(buf), &len);
 TStringList *GPage = new TStringList;
 GPage->Text = buf;
 GPage->SaveToFile("c://page.html");
Почему в buf сохраняется не весь код?
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
02.08.2009, 15:46 19
Ты так резво в стеке выделяешь 6 мегабайтов. У меня вылетает ошибка стека. Так делать нехорошо.
Ты копируй по небольшим порциям, по 5-10 кб, и загоняй результат в какой нибудь TMemoryStream(это чтобы не вылезти за пределы массива). Если ты пару раз будешь вызывать InternetReadFile, а в результате в буффер будет записано 0 байтов, то скорее всего это конец.
0
2 / 2 / 1
Регистрация: 20.07.2009
Сообщений: 55
02.08.2009, 17:36  [ТС] 20
А как это при вызове
C++
1
InternetReadFile
дописывать в
C++
1
TMemoryStream
новый контент?
0
02.08.2009, 17:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2009, 17:36
Помогаю со студенческими работами здесь

Сохранение html страницы
привет всем. как сохранить hmtl страницу в Java?

Сохранение html страницы
Доброго дня всем! Необходимо сохранить html страницу с таблицей, каким образом можно это сделать?...

Создание и сохранение HTML страницы
Здравствуйте. Прошу помощи так как сам только начинаю разбираться с программированием в Интернете....

Сохранение html страницы на диск
Как при помощи ActivX сохранить страницу на диск? собственно весь вопрос...


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

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