Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.12.2012, 22:15
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию idhttp Ошибка сервера 307

Получаю текстовый файлик с сайта (для проверки обновления) через idhttp
s:=idHTTP1.Get('ссылка_удалена');
раньше работало ок,сегодня появилась такая ошибка
HTTP/1.1 307 Temporary Redirect
погуглив,узнал что это ошибка означает что файл временно перемещён и в ответе приходит временная ссылка для получения файла.и послыается она в IdHTTP1.Response.Location.
изменил код:
Код:
s:=idHTTP1.Get('ссылка_удалена',[307]); //тут в случае ошибки 307 не выскочит Exception
  if IdHTTP1.Response.Location <> '' then begin  // если пришел редирект то перходим по нему   
      s := IdHTTP1.Response.Location;
      s:=idHTTP1.Get(s);
      
      end;
то есть по идее получается что я пытаюсь скачать файл,и в случае ошибки 307 я получаю новую ссылку и скачиваю файл по ней. запустил прогу,
получил новый юрл во время ошибки
http://ссылка_удалена/vers.txt?T9C7j...550a96 5da5=1
но на этом шаге:
s:=idHTTP1.Get(s);
опять получил ошибку 307.
Как быть? ведь вроде переходу по новой ссылке.
Браузеры успешно открывают файл по ссылке

PS: админы не сочтите ссылку за рекламу,после решения проблемы ссылки удалю

Последний раз редактировалось Snake22, 21.12.2012 в 16:59.
Ответить с цитированием
  #2  
Старый 21.12.2012, 09:07
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

да все работает:
Код:
  IdHTTP1.HandleRedirects:=True;
  Memo1.Text:=IdHTTP1.Get('http://snaked3.16mb.com/downloads/files/miniserv/vers.txt');
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 21.12.2012, 13:17
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Цитата:
Сообщение от NumLock
да все работает:
Код:
  IdHTTP1.HandleRedirects:=True;
  Memo1.Text:=IdHTTP1.Get('http://snaked3.16mb.com/downloads/files/miniserv/vers.txt');
незнаю почему у вас работает но у меня нет. хендлредирект естественно включал.
и да кстати, с помощью компонента synaps(та м получается куки отправлять) выяснил что при запросе приходит ответ,и в его headere сожержится не только ссылка на редирект,но и кукис,
Код:
HTTP/1.1 302 Moved Temporarily
Server: hosting
Date: Thu, 20 Dec 2012 21:30:41 GMT
Content-Type: text/html
Content-Length: 156
Connection: keep-alive
Set-Cookie: YMCA69=d29c7c2f6de82b616abc9d6da534d9cb; path=/
Location: http://snaked3.ru/?T9C7jFEvUTCm_47a01a3f1753e93bc1f69c550a965da5=1
если его установить то тогда выдаётся нужная страничка.
подскажите как в idhttp установить кукис,а то чтото не получается таким способом:
IdHTTP1.CookieManager.AddServerCookie('кукис=значе ние',IdHTTP1.URL);
кукис кажется не устанавливается,так как приходит таже ошибка 307.
а с компонента synapse httpsend.pas всё ок получается.но он меня не устраивает

Последний раз редактировалось Snake22, 21.12.2012 в 13:24.
Ответить с цитированием
  #4  
Старый 21.12.2012, 13:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

давай я тебе dll откомпилю, ты через нее будешь страничку получать?
sorry for offtop, friday
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 21.12.2012, 13:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

теперь кроме шуток) попробуй так:
Код:
uses
  msxml, ComObj,
...
var
  xml: IXMLHttpRequest;
begin
  xml:=CreateComObject(CLASS_XMLHTTPRequest) as IXMLHttpRequest;
  xml.open('GET', 'http://snaked3.16mb.com/downloads/files/miniserv/vers.txt', False, EmptyParam, EmptyParam);
  xml.setRequestHeader('If-Modified-Since', '0');
  xml.send(EmptyParam);
  if xml.status=200 then Memo1.Text:=xml.responseText;
end;
у меня отрабатывает, но с кирилицей проблемы. нужно по-другому ответ вытаскивать.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 21.12.2012, 16:59
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

спасибо за помощь.но я решил забить на idhttp, оказывается httpsend тоже может прогрессбар во время скачки показывать.а то раньше незнал и этим он меня не устраивал,сейчас научился)
а мне он нужен так как после получения номера версии предлагается самозакачивание файла,с прогрессбаром.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter