Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/42: Рейтинг темы: голосов - 42, средняя оценка - 4.98
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700

IdHTTP1->Get()

09.07.2010, 02:34. Показов 8609. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать проверку здесь, я использую ее для скачивания файла с конкретного сайта (адреса).
Может быть такое что файла там не будет, конечно же если его нету и обратится туда то будет красненькая ошибочка ((( .. подскажите как сделать проверку . Буду очень признателен.

И ещо одно , в IdHTTP1->Responce -> ContentVersion , вот эта версия она что означает ?( . я думал в начале что это версия файла, но никак не мог вытянуть контентверсион.. поэтому не могу понять что это. гугл меня игнорирует ( не хочет подсказывать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2010, 02:34
Ответы с готовыми решениями:

Компонент IdHTTP1
У кого нибуть есть рабочий исходник с подробным комментарием авторизации или вобще просто исходник с этим IdHTTP1 компонентом?

Поток и IdHTTP1
Создал простой поток с IdHTTP1, но появилось пару багов. __fastcall TMyThread::TMyThread(bool CreateSuspended) :...

IdHTTP1 запросы
Помогите при нажатии на кнопку послать запрос на 80й порт локальной машины) Делаю: void __fastcall TForm1::Button1Click(TObject...

19
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
09.07.2010, 14:43
IdHTTP1->Get("localhost")

Исключения делать
1
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
10.07.2010, 01:20  [ТС]
0
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 10:33
Вопрос в тему.
У меня имеется программа. Она скачивает сайт методом GET.
C++
1
2
AnsiString a;
a=IdHTTP1->Get("sit.ru");
Хочу построчно прочитать сделав цикл. Но чтобы построчно считать нужно его сделать String но если на прямую присваивать
C++
1
2
String a;
a=IdHTTP1->Get("sit.ru");
выдает ошибку что можно только юникод и ансистринг.
А если я делаю цикл
C++
1
2
3
for (int a;a<a.Length(),a++)
{//что либо считаю
}
виснит напроч.
Если же переношу в мемо а от туда считаю. То там белеберда полная. Tекст через огромные пробелы
Memo1->Count;

Из этого всего, как можно мне сделать чтобы считывало до конца построчно.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 13:31
Цитата Сообщение от Jinfaa Посмотреть сообщение
выдает ошибку что можно только юникод и ансистринг.
Правильно. А что вам мешает посмотреть тип данных, возвращаемых функцией и создать переменную или объект такого типа?

Например:
C++
1
UnicodeString Text = IdHTTP1->Get("site.ru");
Или:
C++
1
AnsiString Text = IdHTTP1->Get("site.ru");
2
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 18:15
Цитата Сообщение от MikeSoft Посмотреть сообщение
Правильно. А что вам мешает посмотреть тип данных, возвращаемых функцией и создать переменную или объект такого типа?

Например:
C++
1
UnicodeString Text = IdHTTP1->Get("site.ru");
Или:
C++
1
AnsiString Text = IdHTTP1->Get("site.ru");
А как например мне нужно в цикле искать нужные фрагмент и выводить его. Если делать text.Length() то виснет программа
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 18:33
Цитата Сообщение от Jinfaa Посмотреть сообщение
А как например мне нужно в цикле искать нужные фрагмент и выводить его.
Поиск в этих классах осуществляется с помощью метода Pos. Выделение подстроки - SubString.

Пример поиска приводил здесь: Поиск с помощью Pos
А выделение подстроки - обычная обрезка, в которой есть два параметра: откуда начать резать и сколько резать.
1
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 18:36
Цитата Сообщение от MikeSoft Посмотреть сообщение
Поиск в этих классах осуществляется с помощью метода Pos. Выделение подстроки - SubString.

Пример поиска приводил здесь: Поиск с помощью Pos
А выделение подстроки - обычная обрезка, в которой есть два параметра: откуда начать резать и сколько резать.
C++
1
2
3
4
5
6
UnicodeString cyb=HttpDownload->Get("https://www.cyberforum.ru/");
for (int i = 0; i < cyb.Length(); i++) {
positionone=cyb.Pos("<"); // нахождение начала
positiontwo=cyb.Pos(">");        // нахождение конца
HtmlText->Lines->Add(cyb.SubString(positionone,positiontwo-positionone));
}
Попробуйте скомпилируйте. Я про вот это вам говорю. Искать позиции умею.
Хочу чтобы все теги между операторными скобками нашел и записал в мемо
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 18:42
Цитата Сообщение от Jinfaa Посмотреть сообщение
Искать позиции умею
Искать позиции вы умеете. А обрезку текущей строки кто за вас будет делать? Я?
Это и вгоняет программу в бесконечный цикл.
C++
1
cyb = cyb.SubString(positionone,positiontwo-positionone);
1
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 18:43
Цитата Сообщение от MikeSoft Посмотреть сообщение
Искать позиции вы умеете. А обрезку текущей строки кто за вас будет делать? Я?

C++
1
cyb = cyb.SubString(positionone,positiontwo-positionone);
Я же сделал. И работает. ЦИКЛ не работает. Зависает!!! Вот что мне нужно чтобы цикл работал! Чтобы считывал построчно все и выводил в мемо уже! Вот...
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 18:45
Да ничего вы не сделали! Вы в код, что привели выше, добавьте эту строку!

C++
1
2
3
4
5
6
7
UnicodeString cyb=HttpDownload->Get("https://www.cyberforum.ru/");
for (int i = 0; i < cyb.Length(); i++) {
  int positionone=cyb.Pos("<"); // нахождение начала
  int positiontwo=cyb.Pos(">");        // нахождение конца
  HtmlText->Lines->Add(cyb.SubString(positionone,positiontwo-positionone));
  cyb = cyb.SubString(positionone,positiontwo-positionone);
}
2
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 18:46
то что нужно спасибо! =)
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 18:47
Jinfaa, пожалуйста.
В таких случаях всегда смотрите, что вы делаете, в отладчике.
Так бы вы сразу поняли, что после первого прохода у вас ничего не изменилось в cyb
1
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 18:49
Цитата Сообщение от MikeSoft Посмотреть сообщение
Jinfaa, пожалуйста.
В таких случаях всегда смотрите, что вы делаете, в отладчике.
Так бы вы сразу поняли, что после первого прохода у вас ничего не изменилось в cyb
Так теперь у меня цикл выполняется один раз... Почему так?
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 19:11
Jinfaa, переписал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int posS = 0;
int posE = 0;
UnicodeString Text=HttpDownload->Get("https://www.cyberforum.ru/");
TStringList *TagParts = new TStringList();
while (Text.Length() > 0) {
  posS=Text.Pos("<"); 
  posE=Text.Pos(">"); 
  TagParts->Add(Text.SubString(posS,1+posE-posS));
  Text = Text.SubString(posE+1,Text.Length()-posE);
}
HtmlText->Text = TagParts->Text;
delete TagParts;
TagParts = NULL;
Так намного быстрее.

Ещё можно добавить проверку, не имеют ли позиции значение "-1" - это устранит зацикливание, если в какой-то HTML ошибочно не закрыли тэг.
2
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 19:30
Цитата Сообщение от MikeSoft Посмотреть сообщение
Jinfaa, переписал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int posS = 0;
int posE = 0;
UnicodeString Text=HttpDownload->Get("https://www.cyberforum.ru/");
TStringList *TagParts = new TStringList();
while (Text.Length() > 0) {
  posS=Text.Pos("<"); 
  posE=Text.Pos(">"); 
  TagParts->Add(Text.SubString(posS,1+posE-posS));
  Text = Text.SubString(posE+1,Text.Length()-posE);
}
HtmlText->Text = TagParts->Text;
delete TagParts;
TagParts = NULL;
Так намного быстрее.

Ещё можно добавить проверку, не имеют ли позиции значение "-1" - это устранит зацикливание, если в какой-то HTML ошибочно не закрыли тэг.
Совсем не врубаюсь сново зациклило например если выводить между
<html и lang="ru"> бррр. Спасибо большое что помогаете
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 19:57
Цитата Сообщение от Jinfaa Посмотреть сообщение
например если выводить между <html и lang="ru">
Вот этого я не понял ...
По-моему, участка "<html" просто не существует. Страница начинается так: "<!DOCTYPE html"

Допишите проверку позиций начала и конца.
1
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 20:05
Цитата Сообщение от MikeSoft Посмотреть сообщение
Вот этого я не понял ...
По-моему, участка "<html" просто не существует. Страница начинается так: "<!DOCTYPE html"

Допишите проверку позиций начала и конца.
Да даже так не работает. Суть в том, хочу чтобы нашлась позиция в тексте. Хоть где бы она была, хоть в конце хоть в начале. поэтому <html в коде есть такая позиция.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 20:16
Jinfaa, а в чём проблема? Весь текст у вас хранится в массиве. Выводите то, что вам нужно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int posS = 0;
int posE = 0;
UnicodeString Text=HttpDownload->Get("https://www.cyberforum.ru/");
TStringList *TagParts = new TStringList();
while (Text.Length() > 0) {
  posS=Text.Pos("<");
  posE=Text.Pos(">");
  if (posS == 0 || posE == 0) {
    break;
  }
  TagParts->Add(Text.SubString(posS,1+posE-posS));
  Text = Text.SubString(posE+1,Text.Length()-posE);
}
 
for (int i = 0; i < TagParts->Count; i++) {
    int posF = TagParts->Strings[i].Pos("<html");
    if (posF != 0) {
        ShowMessage(TagParts->Strings[i]);
    }
}
 
HtmlText->Text = TagParts->Text;
delete TagParts;
2
 Аватар для Jinfaa
1 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 118
10.07.2010, 20:20
Цитата Сообщение от MikeSoft Посмотреть сообщение
Jinfaa, а в чём проблема? Весь текст у вас хранится в массиве. Выводите то, что вам нужно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int posS = 0;
int posE = 0;
UnicodeString Text=HttpDownload->Get("https://www.cyberforum.ru/");
TStringList *TagParts = new TStringList();
while (Text.Length() > 0) {
  posS=Text.Pos("<");
  posE=Text.Pos(">");
  if (posS == 0 || posE == 0) {
    break;
  }
  TagParts->Add(Text.SubString(posS,1+posE-posS));
  Text = Text.SubString(posE+1,Text.Length()-posE);
}
 
for (int i = 0; i < TagParts->Count; i++) {
    int posF = TagParts->Strings[i].Pos("<html");
    if (posF != 0) {
        ShowMessage(TagParts->Strings[i]);
    }
}
 
HtmlText->Text = TagParts->Text;
delete TagParts;
спасибо огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2010, 20:20
Помогаю со студенческими работами здесь

IdHTTP1->Get - зависание программы
Здравствуйте, я недавно на вашем форуме и вообще в c++ недавно, пришел из delphi. И встретился с такой проблемой, пытаюсь авторизировать...

Прервать запрос IdHTTP1->(zapros);
Ребята подскажите как программно прервать запрос stroka = IdHTTP1-&gt;Get(zapros); Заранее благодарен. Пробовал так, все равно не...

Тормозит всю программу IdHTTP1
Есть такой код: int i; for (i=1;i&lt;=StrToInt(Edit2-&gt;Text);i++) { IdHTTP1-&gt;Get(Edit1-&gt;Text); Label5-&gt;Caption=StrToInt(i); } ...

VK API, IdHTTP1, http/1.1 400 bad request
Пытаюсь отправить файл во ВКонтакте //Получаем сервер для загрузки изображения String Publ = Edit2-&gt;Text; String Token =...

Как передать значение "IdHTTP1" из одной формы во вторую
Доброго времени суток! В общем, есть две формы, в одной происходит авторизация на сайт (тут все работает отлично) : #pragma...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru