Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/82: Рейтинг темы: голосов - 82, средняя оценка - 4.96
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
1

IdHTTP и все, что только можно с ним сделать!

30.08.2012, 21:36. Показов 15015. Ответов 54
Метки нет (Все метки)

Здравствуйте!

Заранее предупреждаю просмотрел не мало тем на форуме(понимаю что вопросы касаемо этого компонента ни раз поднимались), но все равно остаются непонятные вопросы, а так как я собираюсь изучить этот компонент на вполне определенной программе выполняющей определенные действия, то все таки решил создать отдельную тему для себя, чтобы не бегать по разным и не писать везде подрят!

И так вроде с регистрацией я более менее стал разбираться, если что вдруг где не пойму, то спрошу.

Вопрос:
Предположим я выполнил какой то запрос аналогичный запросу из браузера(к примеру та же регистрация), дальше я могу выполнять все те же запросы какие бы выполнял браузер будь я на страницы после регистрации? Т.е. в IdHTTP загрузится страница и будут доступны все возможные запросы с данной страницы? я правильно понимаю?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2012, 21:36
Ответы с готовыми решениями:

LCD TV Тюнер, что можно с ним сделать?
У меня имеется во так тв тюнер Что можно с ним сделать, какое другое применения можно ему...

Привод DVD - RW, что с ним можно сделать?
Всех с праздниками!!Добрый вечер,что можно предпринять по этому поводу??Даю фото падробных...

Можно ли что то с ним сделать? или он уже мертв?
Недавно начал замечать, что плохо работает жёсткий диск. Протестировал его через программу и вот...

Teac FD-05CSB Floppy Drive - что с ним можно сделать ?
Есть такое чудо, возможно живое. Что с ним можно сделать? Флоповоды по сути мне и не нужны...

54
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
30.08.2012, 22:57 2
Цитата Сообщение от Andersen1313 Посмотреть сообщение
Вопрос:
Предположим я выполнил какой то запрос аналогичный запросу из браузера(к примеру та же регистрация), дальше я могу выполнять все те же запросы какие бы выполнял браузер будь я на страницы после регистрации? Т.е. в IdHTTP загрузится страница и будут доступны все возможные запросы с данной страницы? я правильно понимаю?
Возможно придется сохранять куки, а некоторые запросы можно обходить...зависит от страниц сайта...
Это больше относится к протоколу, а не к самому компоненту.

Мой блог по IdHTTP
1
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
31.08.2012, 11:09  [ТС] 3
Avazart, Для работы с куки достаточно только подключить компонент и все необходимое будет само передаваться и записываться:
C++
1
2
IdHTTP1->CookieManager= IdCookieManager1;
IdHTTP1->AllowCookies= true;
Или при выполнении каких то запросов на сервер может потребоваться непосредственно самому передавать какие-то данные из куки?
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 11:24 4
Я как я понял этого достаточно ...

Но видел примеры в которых пытаются вручную передавать куки.

Добавлено через 10 минут
Вот есть статья для POST
http://parsing-and-i.blogspot.... ppost.html
1
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
31.08.2012, 16:15  [ТС] 5
Пытаюсь сделать авто загрузчика изображений с Google Image, вот на чем остановился:
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
29
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringList *SL=new (TStringList);;
    TIdHTTP *Http=new TIdHTTP(NULL);
    Http->CookieManager=IdCookieManager1;
    Http->AllowCookies=true;
    Http->IOHandler=IdSSLIOHandlerSocketOpenSSL1;
    String getURL="https://www.google.com/search?q=";
    String strSearch=Edit1->Text;
    while (strSearch.Pos(" "))
    {
        strSearch=strSearch.Insert("+",strSearch.Pos(" ")+1);
        strSearch=strSearch.Delete(strSearch.Pos(" "),1);
    }
    getURL=getURL+strSearch+"&num=10&hl=en&site=imghp&tbm=isch&source=lnt"+"&tbs=isz:ex,iszw:"+Edit2->Text+",iszh:"+Edit3->Text;
    Http->Get(getURL);
    RichEdit1->Text=Http->Response->ResponseText;
    RichEdit2->Text=Http->Response->RawHeaders->GetText();
    RichEdit3->Clear();
    for (int i = 0; i < IdCookieManager1->CookieCollection->Count; i++) {
        RichEdit3->Lines->Add(IdCookieManager1->CookieCollection->Items[i]->CookieText);
    }
    RichEdit4->Clear();
    RichEdit4->Lines->Add(Http->URL->URI);
    RichEdit4->Lines->Add(Http->URL->Document);
    RichEdit4->Lines->Add(Http->URL->Host);
    RichEdit4->Lines->Add(Http->URL->Bookmark);
    RichEdit4->Lines->Add(Http->URL->Password);
}
Последние строчки в коде чисто для себя посмотреть хоть что возвращают эти методы..

В запросе формируется ссылка типа:
https://www.google.com/search?q=car&num=10&hl=en&site=imghp&tbm=isch&source=lnt&tbs=isz:ex,iszw :1920,iszh:1200
Красным выделил критерии поиска изображений.

Такие вопросы:
1) Когда ввожу такую ссылку в адресную строку браузера к ней приписывается окончание, а когда через get из своего приложения эту ссылку отправляю и потом смотрю методом: RichEdit4->Lines->Add(Http->URL->URI); то там та ссылка какую я сформировал для get запроса(см. изображения подчеркнул различия о каких спрашиваю) Эта разница того что в браузере и то что у меня ни как не влияет?

2) Как вообще посмотреть то что я получил в результате запроса? Получить HTML код, выполнить нажатия по найденным картинкам? Что вообще сделать чтобы получить доступ к найденым картинкам?

Предполагаю что можно получить HTML код и распарсив его получить ссылки на картинки, но как получить этот самый код, чтобы начать с ним работать?
0
Миниатюры
IdHTTP и все, что только можно с ним сделать!   IdHTTP и все, что только можно с ним сделать!  
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 17:32 6
Такие вопросы:
1) Когда ввожу такую ссылку в адресную строку браузера к ней приписывается окончание, а когда через get из своего приложения эту ссылку отправляю и потом смотрю методом: RichEdit4->Lines->Add(Http->URL->URI); то там та ссылка какую я сформировал для get запроса(см. изображения подчеркнул различия о каких спрашиваю) Эта разница того что в браузере и то что у меня ни как не влияет?
Думаю нет...

2) Как вообще посмотреть то что я получил в результате запроса? Получить HTML код.
C++
1
2
 Memo1->Text= IdHTTP1->Get("https://www.cyberforum.ru");// Код страницы
 Memo2->Text= IdHTTP->Response->ResponseText;// Ответ сервера

выполнить нажатия по найденным картинкам? Что вообще сделать чтобы получить доступ к найденым картинкам?
Предполагаю что можно получить HTML код и распарсив его получить ссылки на картинки, но как получить этот самый код, чтобы начать с ним работать?
Та и получить как ты получаешь
1
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 17:43 7
Фрагмент
HTML5
1
2
3
4
<img class="rg_i" name="2elvL0Zdh792JM:"
 src="https://encrypted-tbn3.google.com/images?
q=tbn:ANd9GcTKZF5h3UxoP-gLFR9_1Rf_sFryaXwxbdp0IIavrfbpLAU7fWf8WLAnAxk" 
height="108" width="172" onload="google.stb.csi.onTbn(1, this)"/>
IdHTTP и все, что только можно с ним сделать!


Просмотреть мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::auto_ptr<TIdHTTP> IdHTTP2(new TIdHTTP(NULL) );
std::auto_ptr<TIdCookieManager> IdCookieManager2(new TIdCookieManager(NULL) );
std::auto_ptr<TIdSSLIOHandlerSocketOpenSSL>
             IdSSLIOHandlerSocketOpenSSL2 (new TIdSSLIOHandlerSocketOpenSSL(NULL) );
 
IdHTTP2->CookieManager= IdCookieManager2.get();
IdHTTP2->IOHandler = IdSSLIOHandlerSocketOpenSSL2.get();
 
IdHTTP2->AllowCookies= true;
IdHTTP2->HandleRedirects= true;
 
String Url="https://www.google.com/search?q=car&num=10&hl=en&site=imghp&tbm=isch&source=lnt&tbs=isz:ex,iszw:1920,iszh:1200";
 
try{   Memo1->Text= IdHTTP2->Get(Url);  }
catch(EIdException &E)   // Ловим исключения Indy
        {
             ShowMessage("Ошибка:\n\""+E.Message+"\"");
        };
}
//---------------------------------------------------------------------------
1
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
31.08.2012, 18:13  [ТС] 8
Avazart, чет я тупанул с кодом страницы.. помоему как то пробовал так присвоить еще вчера и ни че не получилось почему то я подумал, что так нельзя
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 18:15 9
Вся сложность в шифровании...

Кстати зачем оно вам здалось ?
0
Миниатюры
IdHTTP и все, что только можно с ним сделать!  
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
31.08.2012, 19:53  [ТС] 10
Да я пробовал через http прога выдает результат, а в браузере все равно исправляется на https а раз я не могу в браузере проследить http я подумал лучше и так же делать в своей программе
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 20:01 11
Ну так я на скрине показал что можно без https напрямую получить через браузер....и нифига не исправляется...
0
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
31.08.2012, 20:02  [ТС] 12
У меня возникла проблема, ни как не могу понять как подгружаются еще изображения, там же страницами выводится результат(разделители: page 2, page 3)
и вот где то после 3 страницы происходит запрос и на страницу подгружаются еще изображения

Сначала происходит вот такой запрос:

Request URL:https://www.google.com/imgeven... =1&iact=ms
Request Method:GET
Status Code:200 OK
Query String Parametersview URL encoded
ei:-N5AULD_B4Sp4gThsYHQDQ
page:2
start:22
ndsp:24
forward:1
iact:ms
Response Headersview source
cache-controlrivate, max-age=0
content-disposition:attachment
content-encoding:gzip
content-length:103
content-type:text/javascript; charset=UTF-8
date:Fri, 31 Aug 2012 15:58:32 GMT
expires:-1
server:gws
status:200 OK
version:HTTP/1.1
x-frame-options:SAMEORIGIN
x-xss-protection:1; mode=block
Когда еще чуть чуть прокрутить страницу(это чуть чуть измеряется несколькими пиксилями крутил очень чуть чуть):

Request URL:https://www.google.com/search?... t=94&csl=0
Request Method:GET
Status Code:200 OK
Query String Parametersview URL encoded
q:car
num:10
hl:en
biw:1920
bih:506
site:imghp
tbs:isz:ex,iszw:1920,iszh:1200
tbm:isch
ijn:2
ei:-N5AULD_B4Sp4gThsYHQDQ
addh:36
sprg:4
page:3
start:94
csl:0
Response Headersview source
cache-controlrivate, max-age=0
content-disposition:attachment
content-encoding:gzip
content-type:text/javascript; charset=UTF-8
date:Fri, 31 Aug 2012 15:58:47 GMT
expires:-1
server:gws
status:200 OK
version:HTTP/1.1
x-frame-options:SAMEORIGIN
x-xss-protection:1; mode=block

Выделенная строчка и там и там одинаковая и как я предполагаю она связывает как то эти запросы им без неё не получится загрузить, как её получить, что это за строчка я не понимаю.. Может быть у вас есть какие нибудь соображения?!
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 20:04 13
А зачем вам заголовки ?
Вытаскивайте ссылки из кода страницы и качайте, парсте код...
0
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
31.08.2012, 20:07  [ТС] 14
Может мне надо как то отправить и эти запросы и тогда в моем IdHTTP будет код с большими изображениями?

P.S. А вообще я думаю я чрезвычайно не удачную затею выбрал для этого компонента..


Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
А зачем вам заголовки ?
Вытаскивайте ссылки из кода страницы и качайте, парсте код...
Avazart, У меня после первого Get запроса в коде выводится ссылок всего на 10 изображений, а я хотел бы иметь возможность получить доступ к большему число изображений!!!
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 20:39 15
P.S. А вообще я думаю я чрезвычайно не удачную затею выбрал для этого компонента..
При чем тут компонент к кривым рукам?

У меня после первого Get запроса в коде выводится ссылок всего на 10 изображений
Так там и есть десять картинок, по страницам надо переходить...
1
Миниатюры
IdHTTP и все, что только можно с ним сделать!  
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
31.08.2012, 20:54  [ТС] 16
Avazart, А можно спросить каким браузером вы пользуетесь? у меня совершенно другой интерфейс поиска картинок?! или может быть там какие то настройки можно выбрать???
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
31.08.2012, 20:58 17
Опера...

Последний скрин это открыт файл браузере, скачаный через IdHTTP т.е сохраненная страница.
0
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
21.09.2012, 20:01  [ТС] 18
Тут выползла ошибка у программы какую я тут обсуждал:

First chance exception at $7591B760. Exception class EIdSocketError with message
'Socket Error # 10054
Connection reset by peer.'.
Ошибка выскакивает в try блоке данного кода:
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
try
            {
                Http->Get(URLFile);
            }
            catch(EIdException &)   //Indy исключения
            {
                continue;
            }
            catch(Exception &)   // Другие НЕ Indy искключения
            {
                continue;
            }
            catch(EIdSocketError &)  // Исключения сокетов
            {
                continue;
            }
            catch(EIdHTTPProtocolException &)
            {
                continue;
            }
            catch(EIdUnknownProtocol &)
            {
                continue;
            }
При попытке открыть такую ссылку: http://www.manywallpaper.com/d... x_1200.jpg

Ссылка не рабочая, браузер не открывает, но я кажется все исключения обрабатываю на сколько я понимаю, а оно все равно не перехватывается.. Что я упустил?
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
21.09.2012, 22:20 19
C++
1
2
3
4
  catch(EIdSocketError &)  // Исключения сокетов
            {
 
            }
Эта ошибка здесь должна перехватываться.

И думаю перехватывается, просто программу нужно не в IDE запускать.
0
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
22.09.2012, 09:15  [ТС] 20
Avazart, Когда не в IDE запускаю у меня просто останавливается программа(она должна продолжать скачивать дальше, а ни чего больше не качает). Вот сам не пойму почему..

Добавлено через 3 минуты
Сейчас запустил приложение, дошел до проблемной ссылки.. Глухо все... нажал кнопку запуска потока который у меня выполняет действия по скачиваю, приложение начало сначала опять дошло до этой ссылки и прекратило выполнение.. В итоге вроде работа прекращается на середине, но прекращается не корректно, у меня после скачивания определенного кол-ва изображений должны выполняться определенные действия, а тут получается поток выходит не закончив свой код
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2012, 09:15

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Использование старого Dsl роутера - что с ним можно сделать?
Возможно ли с помощью старого dsl роутера как то повысить безопасность сети - прошивку какую...

Зачем учить PascalABC.NET? Что реально с ним можно сделать?
зашол на форум, вот лень искать инфу, скажите плиз зачем учить PascalABC.NET? что реально с ним...

Как сделать, чтобы в Configuration Management появилось все, что с ним связано
Служба Агент Sql включена, но как мне сделать чтобы в Configuration Management появилось все что с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.