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

IdHTTP1->Get()

09.07.2010, 02:34. Показов 8557. Ответов 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
3956 / 1811 / 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
3956 / 1811 / 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
3956 / 1811 / 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
3956 / 1811 / 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
3956 / 1811 / 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
3956 / 1811 / 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
3956 / 1811 / 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
3956 / 1811 / 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru