Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что я не так делаю ? HTTPS + Indy 
:(
    Опции темы
ProgMaster
  Дата 24.1.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 24.1.2006
Где: Estonia

Репутация: нет
Всего: нет



Кидаю на форму: TIdSSLIOHandlerSocket и TIdHTTP.
У IdHTTP меняю свойства IOHandler на IdSSLIOHandlerSocket1.
Далее пишу:
Код

  Memo1->Lines->Add("---------------=NEXUS=----------------"); 
  TStringStream *Receive = new TStringStream("") ; 
  idHttp->Get("https://nexus.passport.com/rdr/pprdr.asp", Receive); 
  Memo1->Lines->Add("---------------=ANSWER=----------------"); 
  Memo1->Lines->Add(Receive->ReadString(0)); 
  delete Receive;

В итоге не получаю ничего. Ни ошибки, не зависания...Помоему получаю я пустую страницу. Но мне нужно с этой страницы прочитать HEADER. Как это сделать ??? Страница должна вернуть нечто вроде:
Код

<<< HTTP/1.1 200 OK\r\n 
<<< Server: Microsoft-IIS/5.0\r\n 
<<< Date: Mon, 02 Jun 2003 11:57:47 GMT\r\n 
<<< Connection: close\r\n 
<<< PassportURLs: DARealm=Passport.Net,DALogin=login.passport.com/login2.srf.... 
<<< Content-Length: 0\r\n 
<<< Content-Type: text/html\r\n 
<<< Cache-control: private\r\n 
<<< \r\n 

PM MAIL ICQ   Вверх
_hunter
Дата 24.1.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



для начала: какой размер Receive после Get()' а?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ProgMaster
Дата 24.1.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 24.1.2006
Где: Estonia

Репутация: нет
Всего: нет



Код

  Memo1->Lines->Add("---------------=NEXUS=----------------"); 
  TStringStream *Receive = new TStringStream("") ; 
  idHttp->Get("https://nexus.passport.com/rdr/pprdr.asp", Receive); 
  int x = Receive->Size;
  Memo1->Lines->Add(StrToInt(x));
  Memo1->Lines->Add("---------------=ANSWER=----------------"); 
  Memo1->Lines->Add(Receive->ReadString(0)); 
  delete Receive;

В Х хранится 0. Значит никакого ответа не пришло. Это очень странно. Хотя может и не должно ??? Header/загловок запроса сюда входит ? Что делать, не знаю...
PM MAIL ICQ   Вверх
Snowy
Дата 24.1.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 1
Всего: 484



А так: ?
Код
Memo1->Lines->Add(IdHTTP->Response->ResponseText);

Добавлено @ 20:49
Код

  Memo1->Lines->Add("---------------=NEXUS=----------------");    
  idHttp->Head("https://nexus.passport.com/rdr/pprdr.asp");    
  Memo1->Lines->Add("---------------=ANSWER=----------------");    
  Memo1->Lines->Add(IdHTTP->Response->ResponseText);

PM MAIL   Вверх
ProgMaster
Дата 24.1.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 24.1.2006
Где: Estonia

Репутация: нет
Всего: нет



А так как раз таки получаю то что надо. А именно:
Код

HTTP/1.1 200 OK

Значит, как я и предпологал, нужно прочитать заголовок. А как читать заголовок ? Вообще в этих компонентах есть такая вещь ?
PM MAIL ICQ   Вверх
ProgMaster
Дата 24.1.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 24.1.2006
Где: Estonia

Репутация: нет
Всего: нет



Всем спасибо за помощь. Разобрался наконец-то ;) !
Если кому надо:
Код

  TStringList *headers = new TStringList;
  TStringStream *Receive = new TStringStream("") ;
  mStatus->Lines->Add("---------------=NEXUS=----------------");
  idHttp->Get("https://nexus.passport.com/rdr/pprdr.asp", Receive);
  mStatus->Lines->Add("---------------=ANSWER=----------------");
  mStatus->Lines->Add(idHttp->Response->ResponseText);
  idHttp->Response->RawHeaders->ConvertToStdValues(headers);
  delete Receive;
  delete headers;

PM MAIL ICQ   Вверх
ProgMaster
Дата 24.1.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 24.1.2006
Где: Estonia

Репутация: нет
Всего: нет



Дамс. Ступень выше прошла успешно, но появилась еще одна проблема. По условия протокола, мне нужно послать HTTPS GET запрос с шапкой. Шапка выглядит приблизительно так:
Код

>>> GET /login2.srf HTTP/1.1\r\n
>>> Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=example%40passport.com,pwd=password,lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1062764229,kpp=1,kv=5,ver=2.1.0173.1,tpf=43f8a4c8ed940c04e3740be46c4d1619\r\n
>>> Host: login.passport.com\r\n\r\n

Что делаю я:
Код

  AnsiString txtRequest;
  TStringStream *cmd = new TStringStream("");
  TStringList *headers = new TStringList;

  txtRequest = "GET /login2.srf HTTP/1.1\r\n";
  txtRequest += "Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=justauser%40passport.com,pwd=password,......";
  txtRequest += "Host: loginnet.passport.com\r\n\r\n";

  cmd->WriteString(txtRequest);
  
  idHttp->DoRequest(hmGet, "https://loginnet.passport.com/login2.srf", cmd, NULL);

  Memo1->Lines->Add("---------------=ANSWER=----------------");
  Memo1->Lines->Add(idHttp->Response->ResponseText);

  idHttp->Response->RawHeaders->ConvertToStdValues(headers);

  Memo1->Lines->Add(headers->Text);
  headers->SaveToFile("headers.txt");

  delete headers;
  delete cmd;

Дык вот правильно ли я передаю параметр cmd и другие в DoRequest ? Вообще, может я что не так делаю, подскажите. Или так вовсе нельзя использовать DoRequest совместно с hmGet ?
PM MAIL ICQ   Вверх
ProgMaster
Дата 25.1.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 24.1.2006
Где: Estonia

Репутация: нет
Всего: нет



Немножко поисследовал я работу DoRequest с методом hmGet. И что же выяснил: Запрос такого вида:
Код

  txtRequest = "GET /login2.srf HTTP/1.1\r\n";
  txtRequest = txtRequest + "Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=justauser%40passport.com,pwd=QaZ1WsX2,";
  txtRequest = txtRequest + "Host: loginnet.passport.com\r\n";

  cmd->WriteString(txtRequest);

  idHttp->DoRequest(hmGet, "https://loginnet.passport.com", cmd, NULL);

Возвращает не содержимое login2.srf, а содержимое "/"...Т.е. основной директории. Получается, что с методом hmGet, 3ий параметр игноририуется. Так что ли ??? И как выйти из этого положения ?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.