HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 27.05.2010, 23:24
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

js и php я чутка и так знаю =) на уровне не новичка так скажем))
 
Ответить с цитированием

ну звиздец какойто просто...
  #12  
Старый 28.05.2010, 01:52
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
Smile ну звиздец какойто просто...

Дабы не плодить кучу тем по моим вопросам, задам вопрос тут. Есть 1 функция и одна процедура. Обе взаимосвязанны. Называются Get и Redirect. Думаю человек, знающий протокол HTTP поймет, что за функции. Допустим при выполнении функции GET произошло 2 редиректа. Как сделать так, что бы функция GET закончила свое выполнение, до тех пор, пока все редиректы не закончатся? т.е. вернула страницу конечного редиректа. В моем же случае функция GET возврщает код 1й страницы, а нужно той страницы, на которую произошла переадресация. Получается так, что функция get работает дальше и грузит все страницы, но в том коде, в котором она выполняется она отдала код 1й страницы и все. Привожу коды обеих процедур:

Код:
// ---- Обрабатываем перенаправление ----
procedure THTTPCli.Redirect(const AData, AHost: string);
var
   Location : string;
begin
   Location := AData;
   Location := Copy(Location, Pos('Location:', Location) +10, Length(Location));
   Delete(Location, Pos(#13, Location), Length(Location));

  // Проверка локаций и исправление
   If Location[1] = '/' Then Get(AHost + Location);

   If (Location[1] <> '/') And (Pos('http://', location) = 0) Then
   begin
    Location := '/' + Location;
    Get('http://' + AHost + Location);
   end;

   If Pos('http://', Location) <> 0 then
   begin
    Location := Copy(Location, Length(GetHost(Location)) +8, Length(Location));
    Get(Location);
   end;

end;

// ---- Отправка GET-запроса ---- ;overload
function THTTPCli.Get(const AURL: string): string;
var
  Head   : string;
  Host   : string;
  urlObj : string;
begin
 { Парсим url }
  urlObj := AURL;
  urlObj := Copy(urlObj, Length(GetHost(urlObj)) +8, Length(urlObj));
  Host   := GetHost(AURL);

 // Составляем заголовок без куков
  Head := 'GET ' + urlObj + ' HTTP/1.1' + crlf +
          'User-Agent: Mozilla/4.8 [en](Windows NT 5.0; U)' + crlf +
          'Connection: close' + crlf +
          'Host: ' + Host + crlf + crlf;

 // А если таковые имеются, прибавляем их к заголовку
 If Length(_cookie) <> 0 Then
 begin
   Head := 'GET ' + urlObj + ' HTTP/1.1' + crlf +
           'User-Agent: Mozilla/4.8 [en](Windows NT 5.0; U)' + crlf +
           'Connection: close' + crlf +
           'Cookie: ' + _cookie + crlf +
           'Host: ' + Host + crlf + crlf;
 end;
 // Отсылаем запрос
  SendRequest(Host, 80, Head, Result);

 // Если сервер сказал 302, переходим по сказанной локации
  If Pos('302', Result) <> 0 then
  begin
     Redirect(Result, Host);
  end;
end;
блин как запарился уже. Извините за офтоп и кучу всем давно надоевшим вопросам.

Последний раз редактировалось RedFern.89; 28.05.2010 в 02:32.. Причина: дикий звиздец
 
Ответить с цитированием

  #13  
Старый 28.05.2010, 08:54
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

Цитата:
If Pos('302', Result) <> 0 then
Хм, если на странице просто попадется "302" то это будет считаться как редирект?
Вообще, если я правильно тебя понял то тебе надо просто организовать цикл.
Что-то типа:
while Pos('302', Result) <> 0 do
Redirect(Result, Host);
 
Ответить с цитированием

  #14  
Старый 28.05.2010, 12:56
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

Цитата:
Сообщение от GhostOnline  
Хм, если на странице просто попадется "302" то это будет считаться как редирект?
Вообще, если я правильно тебя понял то тебе надо просто организовать цикл.
Что-то типа:
while Pos('302', Result) <> 0 do
Redirect(Result, Host);

и в твоем случае он будет все время грузить последнюю страницу... не вариант
 
Ответить с цитированием

  #15  
Старый 28.05.2010, 16:37
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

Так епт сделай Redirect функцией, которая например возвращает true если редирект был и false если не был
Вообше, имхо извращенное у тебя распределение по методам
 
Ответить с цитированием

  #16  
Старый 28.05.2010, 20:57
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

GhostOnline, пример в студию!!!
 
Ответить с цитированием

  #17  
Старый 28.05.2010, 21:10
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

Нужно чтобы твоя функция Redirect возвращала тело новой скачанной страницы. Тогда можно реализовать цикл, который написал GhostOnline.
 
Ответить с цитированием

  #18  
Старый 29.05.2010, 02:30
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

вообщето цикл так и висит, потому-что он читает код первого ответа и все...
 
Ответить с цитированием

  #19  
Старый 29.05.2010, 16:39
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

Пипец..Ты зациклил 2 метода, в первом вызываешь второй, во втором первый, и т.д.. еще удивляешься почему возвращается "код певрого ответа"
Get - функция, она возвращает result.
Далее если ответ 302 то ты вызываешь процедуру Redirect и ей передаешь resault.
Процедура по определению ничего не возвращает, и с result ничего не делает, потому что:
1. Ты в процедуре не оперируешь параметром AData
2. Даже если бы захотел оперировать, то значение все равно бы не изменилось, ибо: const AData
Цитата:
// Если сервер сказал 302, переходим по сказанной локации
If Pos('302', Result) <> 0 then
begin
Redirect(Result, Host);
end;
Переходить то ты переходишь, но с какого х** result должна измениться если ты в этой функции с ней ничего больше не делаешь?

PS Мораль такова: вызываемая подпрограмма не может изменять результат той подпрограммы в которой она была вызвана, за исключением способа передачи по ссылке(var)

Последний раз редактировалось GhostOnline; 29.05.2010 в 16:41..
 
Ответить с цитированием

  #20  
Старый 31.05.2010, 00:23
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

уважаемый GhostOnline, я вас понел)) спасибо большое))
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Задержка в WinSock между send() и recv() GlooK С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 9 29.09.2009 18:26
Веб 2.0 и Веб 3.0. Будущее Интернета. SK | Heaton Мировые новости. Обсуждения. 5 13.06.2007 02:07



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ