Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2011, 09:38   #1
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию Cокет эррор #0

Всем доброго времени суток.
Прошу помочь.
Ответьте пожалуйста на вопрос:
При выполнении следующего отрывка кода:
Код:
procedure TForm1.Button1Click(Sender: TObject);
VAR
I:INTEGER;
Data:TStringList;
begin
  //Получили страницу логина, через безопасное соединение. Все ок.
  HTTP.Get('https://taba.ru/?r=index/login');
  //Заголовки ответа:
  Memo1.Lines.Add(HTTP.Response.RawHeaders.Text);
  //Show Cookies
for i := 0 to CM.CookieCollection.Count -1 do
  Memo2.Lines.Add(CM.CookieCollection.Items[i].CookieText);
//куки мы получили, и вывели в мемо2, чтобы было.
Data:=TStringList.Create;
Data.Add('LoginForm[email]=thehavo@yandex.ru');
Data.Add('LoginForm[password]=1234');
//Все правильно, и логин и пасс
//Вот тут выдается сокет эррор номер 0 :
Memo1.Text:=HTTP.Post('https://taba.ru/?r=index/login',Data);
//При отправке на страницу Index.php логин не производится. Хотя сокет эррор не выдается
end;
Подскажите пожалуйста, что может быть причиной?
Вернее так:
Как отправить пост-запрос на страницу
https://taba.ru/?r=index/login
и произвести логин?
)Игнат( вне форума Ответить с цитированием
Старый 23.03.2011, 11:03   #2
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Кое в чем разобрался, модифицировал код, вот что получается:
Код:
begin
  EMail := 'thehavo@yandex.ru';
  Password := '1234';
  with HTTP do
  begin
    AllowCookies := True;
    HandleRedirects := True;
    CookieManager := CM;
    IOHandler := SSL;
    HTTPOptions := [];
    with Request do
    begin
      Host :=	'taba.ru';
      UserAgent :=	'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.17) Gecko/20110121 Firefox/3.5.17';
      Accept :=	'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
      AcceptLanguage :=	'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
      AcceptEncoding :=	'gzip,deflate';
      AcceptCharset :=	'windows-1251,utf-8;q=0.7,*;q=0.7';
      Connection :=	'keep-alive';
      ContentType := 'application/x-www-form-urlencoded';
    end;
  end;
  Data := TStringList.Create;
  Data.Add('auth_type=1');
  Data.Add('LoginForm%5Bemail%5D=' + EMail);
  Data.Add('LoginForm%5Bpassword%5D=' + Password);
  Data.Add('LoginForm%5Bopenid%5D=');
  Data.Add('sbmt=%D0%92%D0%BE%D0%B9%D1%82%D0%B8');
  try
    HTTP.Post('https://taba.ru/?r=index/login', Data);
  except
    Memo2.Lines.Add(IntToStr(HTTP.ResponseCode));
// выдает 302, но куки получает 
  end;
  Memo1.Lines.Add(HTTP.Response.ResponseText);
  for i := 0 to CM.CookieCollection.Count - 1 do
    Memo2.Lines.Add(CM.CookieCollection.Items[i].CookieText);
end;
//Но страницы потом запросить нельзя
HTTP.GET('http://taba.ru/?r=dashboard');
//Выдает сокет эррор, и ответ сервера - код 302.
//то-же происходит и при запросе https://taba.ru/?r=dashboard и вообще любой страницы
// Мозг уже сломал, нужно получить страницу профиля( /?r=dashboard);
//А не получается, постоянно выдает редирект, и не дает ХТМЛ- код страницы.
// как справиться?

Последний раз редактировалось )Игнат(; 23.03.2011 в 11:06.
)Игнат( вне форума Ответить с цитированием
Старый 23.03.2011, 14:05   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
постоянно выдает редирект
Ну так и перейди по ссылке, которая тебе возвращена в респонсе !

Лень ручками редирект обрабатывать ?
Ну так на то у IdHTTP св-во есть - HandleRedirects)
mss вне форума Ответить с цитированием
Старый 23.03.2011, 17:52   #4
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Ну так и перейди по ссылке, которая тебе возвращена в респонсе !

Лень ручками редирект обрабатывать ?
Ну так на то у IdHTTP св-во есть - HandleRedirects)
См. пост №2.
Код:
    AllowCookies := True;
    HandleRedirects := True;
    CookieManager := CM;
Куки получил. Но страницу получить не могу. Выдает сокет эррор, а респонс-код 302.
как в такой ситуации получить страницу?

Выдает такой респонс:
HTTP/1.1 302 Moved Temporarily

Последний раз редактировалось )Игнат(; 23.03.2011 в 17:59.
)Игнат( вне форума Ответить с цитированием
Старый 23.03.2011, 23:44   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Resolving 302 errors - general

The 302 response from the Web server should always include an alternative URL to which redirection should occur. If it does, a Web browser will immediately retry the alternative URL. So you never actually see a 302 error in a Web browser, unless perhaps you have a corrupt redirection chain e.g. URL A redirects to URL B which in turn redirects back to URL A. If your client is not a Web browser, it should behave in the same way as a Web browser i.e. immediately retry the alternative URL.

If the Web server does not return an alternative URL with the 302 response, then either the Web server sofware itself is defective or the Webmaster has not set up the URL redirection correctly.
mss вне форума Ответить с цитированием
Старый 24.03.2011, 05:59   #6
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Это я читал.
Можно тогда последний вопрос?
Как получить УРЛ, на который перенаправление идет?
)Игнат( вне форума Ответить с цитированием
Старый 24.03.2011, 09:53   #7
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

У TIdHTTP есть событие OnRedirect
mss вне форума Ответить с цитированием
Старый 24.03.2011, 11:10   #8
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Можно подробнее?
Как можно использовать это событие? пример кода, пожалуйста
)Игнат( вне форума Ответить с цитированием
Старый 24.03.2011, 14:16   #9
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

Для начало посмотри описание самого метода, там есть переменная dest, где и содержится нужный адрес. У меня проблема была с зацикливанием редиректа, лечил так:
Код:
procedure TfmMain.IdHTTPRedirect(Sender: TObject; var dest: String;
  var NumRedirect: Integer; var Handled: Boolean; var VMethod: String);
begin
  rdest := '';
  if pos('http://simple.com/offer.html?id=', dest) > 0 then
  begin
    rdest := dest;
    IdHTTP.RedirectMaximum := 1;
  end;
end;
Usov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск