Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переадресация в IdHTTP, Перекидывает на др стр после POST 
:(
    Опции темы
MaDCoD
Дата 8.5.2006, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте вот у меня возник один вопрос:
Я запрашиваю страничку методом пост через IDHttp, потом меня перекидывает на другую страничку (оснифал - 302 Moved), в теле которой примерон такая запись:
Цитата
The document has moved <A HREF="http://site.ru/script?mode=checkcookie;sid=12345">here</A>.<P>

Вот уменя вопрос как получить текст этой странички, таким кодом:
Код

var http:Tidhttp;
........
http.handleredirects:=true;
http.redirectsmaximum:=1;
memo1.text:=http.post('http://site.ru/script1.cgi',body);


Мемо остаётся чистым.. и потом после получения этой страницы нужно запросить http://site.ru/script?par=r;sid=12345 уже методом GET, это надо следать новым созданием TidHTTP и новым запросом?

Если не выставлять максимальное колво редиректов, то перебрасывает тоже, но получается запрос POST на вторую стр, т.е. на которую перебросило.. В чём проблема? 
PM MAIL   Вверх
MaDCoD
Дата 9.5.2006, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Объясню подробнее:
Делаю пост на страницу, мне приходит ответ 302 Moved и перекидывает на другую страницу, содержащую (как отображается в сниффере) некий текст, который мне нужно вывести в мемо.. Но в том же снифере показывается что после Moved idHTTP пытается сделать POST (передаёт все переменные) уже в новую страницу.. Как получить текст из этой страницы? Или как сделать чтоб все редиректы проходили нормально? Это реально сделать в idHTTP?

Объясните плз smile  
PM MAIL   Вверх
Демо
Дата 9.5.2006, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Попробуй воспользоваться событием OnRedirect. 


--------------------
    
PM MAIL ICQ Skype   Вверх
MaDCoD
Дата 9.5.2006, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


Эксперт
****


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

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



HandleRedirects установить в true
PM MAIL   Вверх
MetalFan
Дата 7.3.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



я делал так:
HandleRedirect = false;
Код

function TFHU_HttpClient.DoPost(const AURL: string;
  AData: TIdMultiPartFormDataStream; var AResponse: string): Integer;
var
  lRedirectUrl: string;
begin
  try
    Result := 0;
    AResponse := FIdHTTP.Post( AURL, AData );
  except
   on E: EIdHTTPProtocolException do
     if (E.ReplyErrorCode = 302) or
        (E.ReplyErrorCode = 301) then
     begin
       lRedirectUrl := FIdHTTP.Response.Location;
     end
     else
     begin
       Result := E.ReplyErrorCode;
     end;
 end;
 if lRedirectUrl <> '' then
   Result := DoGet(lRedirectUrl, AResponse);
 FLastError := Result;
end;

function TFHU_HttpClient.DoGet(const AURL: string;
  AResponse: TStream): Integer;
var
  lRedirectUrl: string;
begin
   try
     lRedirectUrl := '';
     FIdHTTP.Get( AURL, AResponse );
     Result := C_FHU_ERROR_NoError;
   except
     on E: EIdHTTPProtocolException do
       if (E.ReplyErrorCode = 302) or
          (E.ReplyErrorCode = 301) then
       begin
         lRedirectUrl := FIdHTTP.Response.Location;
       end;
     on E: ETerminateException do
     begin
       FLastErrorText := C_FHU_TerminatedText;
       Result := C_FHU_ERROR_Terminated;
       FState := fhusError;
     end;
   end;
   if lRedirectUrl <> '' then
      Result := DoGet(lRedirectUrl, AResponse);
   FLastError := Result;
end;


часть моего рабочего кода.
смысл я думаю понятен?



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Lence
Дата 8.3.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


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

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



вот что я делаю ... 


Код

var
d: TStrings;
w, s: string;
http1: TIdHttp;
begin
   d := TStringList.Create;
   w:=ExtractFilePath(paramstr(0));
   http1:=TIdHTTP.Create(form3);
   http1.OnWorkBegin:= Form3.OnWorkBegin;
   http1.OnWork:= Form3.OnWork;
   http1.OnRedirect:= form3.Redirect;
try
  begin

        application.ProcessMessages;
        d.Add ('n=iwueiqweuiw');
   try
        s:= Http1.Post ('http://www.site.ru/script.php',d);
   except
        on E: Exception do
        begin
        memo1.Lines.Add(E.Message); // тут у меня написано http1.1/302 found
           end
           end


а вот здесь мне нужно узнать что пришло в ответ.... как мне передать то что мне пришло в переменную s ???
Код

procedure TForm3.Redirect(Sender: TObject; var dest: String; var NumRedirect: Integer; var Handled: Boolean;var VMethod: TIdHTTPMethod);
begin

end;



Это сообщение отредактировал(а) Lence - 8.3.2007, 17:49
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 8.3.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



ты мой код смотрел?...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Lence
Дата 8.3.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


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

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



Цитата(MetalFan @ 8.3.2007,  21:04)
ты мой код смотрел?...

Смотрел но я не совсем понял как им воспользоваться ? 
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 9.3.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



им не надо пользоваться! нужно понять его смысл и сделать у себя подобную реализацию...
ладно, откоментирую пошагово
Код

function DoPostWRedirect(const AURL: string;
  AData: TStream; var AResponse: string): Integer;
var
  lRedirectUrl: string;
begin
  try
    lRedirectUrl := '';
    Result := 0; //возвращаем 0, если нет ошибки
    AResponse := FIdHTTP.Post( AURL, AData ); //здесь нужно подставить доступный TIdHTTP, вместо FIdHTTP
  except
   on E: EIdHTTPProtocolException do //если нужное нам исключение, сообщающее о редиректе, то
     if (E.ReplyErrorCode = 302) or
        (E.ReplyErrorCode = 301) then
     begin
       lRedirectUrl := FIdHTTP.Response.Location; //запоминаем адрес, куда послали
     end
     else
     begin
       Result := E.ReplyErrorCode; //иначе - возвращаем код полученной ошибки
     end;
 end;
 if lRedirectUrl <> '' then //если был получен редирект(здесь можно проверить доп.условия на необходимость редиректа), то идем по новому адресу
   Result := DoPostWRedirect(lRedirectUrl, AData, AResponse);
end;



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
diablist
Дата 11.12.2007, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня такой вопрос, а как мне схватить ссылку если к примеру такая ссылка
http://www.site.com/file.exe
перенаправляет на
ftp://download.site.com/file.exe
PM MAIL   Вверх
MetalFan
Дата 11.12.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



точно также


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
diablist
Дата 11.12.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MetalFan
Через
Код

if (E.ReplyErrorCode = 302) or
        (E.ReplyErrorCode = 301) then
 ?
Я не могу понять что за функция
Код

function DoPostWRedirect

И как сделать чтоб она заработала, к примеру беру я 
Код

http.get('http://www.site.com/file.exe');
 а как дальше расписать?
PM MAIL   Вверх
MetalFan
Дата 11.12.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(diablist @  11.12.2007,  17:48 Найти цитируемый пост)
Я не могу понять что за функция

а что понимать? есть же ее код выше.

Цитата(diablist @  11.12.2007,  17:48 Найти цитируемый пост)
И как сделать чтоб она заработала, к примеру беру я 

может AllowRedirects достаточно выставить?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
diablist
Дата 11.12.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да нет, там протокол меняется на ftp
Блин не могу допереть последовательность, чето меня тормозит.
Напиши плиз простой пример такого:
Я жму на кнопку, там такое событие:
IdHTTP1.Get('http://www.site.ru/downloads/file.exe');
Теперь оно должно определить что редерект на ftp://site.ru/downloads/file.exe и начать закачку уже отсюда (я так понимаю 
Код
IdFTP.get();
)
PM MAIL   Вверх
MetalFan
Дата 11.12.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



тогда AllowRedirects в false, ловишь, куда пересылает. (Response.Location вроде) и вперед


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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