Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > TIdHttp и Partial get


Автор: phanatos 20.9.2006, 20:37
Эта тема почему-то неосвещена, хотя все механизмы у Indy есть. Полазив по интернету пришел к выводу, что или народ не понимает сути вопроса, или в разных версиях Indy разная реализация. У меня лично 10.1.5, и вот эта версия работает очень странно. Как известно, для частичной загрузки есть такая штука:
Код

  IdHTTP1.Request.ContentRangeStart := 10000;
  IDHTTP1.Request.ContentRangeEnd := 20000;

Её советуют на разных форумах, но она не работает. И не удивительно, так как покопавшись в нутренностях Indy можно увидеть, что 
ContentRangeStart и ContentRangeEnd используются только при формировании TIdResponseHeaderInfo. 

Код

    sCR := iif(HasContentRange,
      Sys.Format('%d%s%d', [FContentRangeStart, '-', FContentRangeEnd]), '*');
    sCI := iif(HasContentRangeInstance,
      Sys.Format('%d', [FContentRangeInstanceLength]), '*');

    RawHeaders.Values['Content-Range'] := 'bytes ' + sCR + '/' + sCI;


А в TIdRequestHeaderInfo.SetHeaders используется свойство Range (причем так банально):

Код

    if Length(FRange) > 0 then
    begin
      Values['Range'] := 'bytes=' + FRange; {do not localize}
    end;


Ну а в хелпе про range написано следующее: 
Цитата

Range is a Published String property


И пипец. Вот такой вот продукт =)

Короче, те, кто не знает, как скачать кусок, пишите так:

Код

var 
  LDestStream: TMemoryStream;
  aStart,aEnd:Int64;
  url:String;
begin
  url:='http://www.aaa.com';
  aStart:=10;
  aEnd:=20;
  LDestStream := TMemoryStream.Create;
  try
    IDHTTP1.Request.Range:=Format('%d%s%d',[aStart,'-',aEnd]);
    IdHTTP1.Get(url, LDestStream);
    LDestStream.SaveToFile('D:\1.htm');
  finally
    LDestStream.Free; 
  end;
end;



Автор: drkot 21.9.2006, 10:50
Десятый пакет нестабилен и недоделан (пилот версия). Ее только обкатывают.
Поставь 7 или 8 гораздо стабильнее да белух пятен меньше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)