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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2012, 21:21   #1
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение WinInet узнать редиректы

Как получить редиректы, при использовании WinInet? Найти в поиске не удается нужное. Используется: InternetOpen, InternetConnect, HttpOpenRequest, HttpSendRequest. Все работает, но не понятно про редирект. idHTTP выдает редиректы, по которым проходит.

Например этот URL
Код:
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Last-Modified: Thu, 03 May 2012 09:13:13 GMT
Accept-Ranges: bytes
ETag: "c3da60f7c29cd1:0"
Server: Microsoft-IIS/7.5
Content-Disposition: attachment
Content-Length: 803584
Date: Mon, 02 Jul 2012 17:22:35 GMT
Connection: keep-alive
Content-Disposition пуст. Поэтому хотел бы узнать про редиректы. Еще есть Location:, но в конечном редиректе он отсутствует.

Последний раз редактировалось Alter; 02.07.2012 в 21:25.
Alter вне форума Ответить с цитированием
Старый 02.07.2012, 21:47   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

хм.. вообще-то перенаправление это код 302.
На примере форума, на гл. странице я нажал "Основы delphi", среди прочего там есть ответ и привет:

Ответ(я):
(Request-Line):GET /counter?id=1223103;t=47;js=13;r=;j= true;s=1280*1024;d=32;rand=0.770557 0426738214 HTTP/1.1
User-Agent:Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.00
Host9.ca.b2.a1.top.list.ru
Accept:text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language:ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding:gzip, deflate
Referer:http://programmersforum.ru/
Connection:Keep-Alive

Привет мне:
(Status-Line):HTTP/1.1 302 Moved Temporarily
Server:wz/1.5
Date:Mon, 02 Jul 2012 17:43:06 GMT
Location:http://core1.node9.top.mail.ru/count...05570426738214
Cache-control:no-store, no-cache, must-revalidate
Pragma:no-cache
Content-Length:0
Connection:close
Человек_Борща вне форума Ответить с цитированием
Старый 02.07.2012, 22:22   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Знаю, что 302 и 301, еще 307. Может можно CallBack какой нибудь присоединить к коду, и из него получать? И оставить авторедирект.

Ручное(не совсем то, что нужно), это есть, но тогда как в idHTTP придется прикручивать ограничение на колличество редиректов.
Код:
procedure ParseHeaders(HeasersStr: string);
var
  i: integer;
  s: string;
begin
  if not Assigned(FHeaders) then
    FHeaders := TStringList.Create;
  FHeaders.Clear;
  FHeaders.Text := HeasersStr;
  FHeaders.Delete(FHeaders.Count - 1);

  if FHeaders.Count > 0 then
  begin
    ...
    FResponseText := Trim(s);
    // если было перенаправление, то читаем адрес
    if (ResponseCode = HTTP_STATUS_MOVED) or
      (ResponseCode = HTTP_STATUS_REDIRECT) then
      for i := 0 to FHeaders.Count - 1 do
      begin
        if pos('location:', lowercase(FHeaders[i])) > 0 then
        begin
          FLocation := lowercase(FProtocol) + '//' + FDomain + '/' + Trim
            (copy(FHeaders[i], 10, Length(FHeaders[i]) - 9));
          break;
        end;
      end;
  end;
end;
Вот как работает у idHTTP.
Код:
procedure TForm1.IdHTTP1Redirect(Sender: TObject; var dest: string;
  var NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
begin

end;
Код:
Dest: http://go.microsoft.com/fwlink/?LinkID=234123
NumRedirect: 1
Handled: True
VMethod: HEAD

Dest: http://download.microsoft.com/download/8/7/A/87ABBFD5-2E79-4B82-BC94-F2489E8C0BBA/mssstool32.exe
NumRedirect: 2
Handled: True
VMethod: HEAD
Alter вне форума Ответить с цитированием
Старый 02.07.2012, 22:32   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Alter, а почему не попробовать другие варианты? WinInet архаичен, а Indy просто толст. Есть Synapse и Overbyte ICS.
Человек_Борща вне форума Ответить с цитированием
Старый 03.07.2012, 17:17   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Нет ответов по теме. Другие варианты в другой раз, пока этот нужен.
Alter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi, IdHTTP, редиректы Zer0 Помощь студентам 0 30.11.2011 11:51
WinInet [CACHE] Win Api 11 28.06.2011 21:52