Скачать файл с защищённого сервера
От: axon_an  
Дата: 10.08.05 16:19
Оценка:
Доброе время суток!

Мне нужно качать файл http://users.ints.net/donalex/Ostatuli.zip три раза в день (ессно пароль и логин я знаю), как мне автоматизировать это действо? Пользую BDS2005, хотя стоит и D7. Слышал что можно с помощью библиотеки Indy, но какой именно компонент и как? Или если через Wininet, то куда там вписывать логин/пароль?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Скачать файл с защищённого сервера
От: BeeNokle Россия  
Дата: 11.08.05 04:48
Оценка:
Здравствуйте, axon_an, Вы писали:

_>Доброе время суток!


_> Мне нужно качать файл http://users.ints.net/donalex/Ostatuli.zip три раза в день (ессно пароль и логин я знаю), как мне автоматизировать это действо? Пользую BDS2005, хотя стоит и D7. Слышал что можно с помощью библиотеки Indy, но какой именно компонент и как? Или если через Wininet, то куда там вписывать логин/пароль?


Конечно с помощью Инди. Авторизацию можно пройти указав username и password в св-ве Request:

idHTTP.request.username:='';
...

А потом делаете постом или гетом. Лучше постом, он возвращает поток сразу, который вы и сохранишь в файл.

Доп. информацию найдете в справке, тем более что в D2005 они достаточно удобная, и по инди там есть информация тоже!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Разработка и продвижение сайтов:
<a href="http://www.inform-s.ru/">http://www.inform-s.ru/&lt;/a&gt;
Re: Скачать файл с защищённого сервера
От: neiroman Украина  
Дата: 11.08.05 11:05
Оценка:
А чем он хоть защищен ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Слова, пустые слова, подумал Стормгрен. Слова, за которые прежде люди дрались и умирали, но никогда больше не станут за них ни умирать, ни драться. И от этого мир станет лучше.
Re[2]: Скачать файл с защищённого сервера
От: axon_an  
Дата: 12.08.05 05:24
Оценка:
Здравствуйте, neiroman, Вы писали:

N>А чем он хоть защищен ?


Для того чтобы скачать этот файл, необходимо ввести логин/пароль. Чем защищён я не знаю, нажми на ссылку, может ты посмотришь? http://users.ints.net/donalex/Ostatuli.zip
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Скачать файл с защищённого сервера
От: Zip Россия none
Дата: 12.08.05 05:43
Оценка: :)
а какой пароль?
Re[4]: Скачать файл с защищённого сервера
От: BeeNokle Россия  
Дата: 12.08.05 06:28
Оценка:
Здесь имеется в виду что не сам файл защищен, а доступ к нему, именно логином и паролем. Защищен средствами сервера Apache. Ну лично я это так понял...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Разработка и продвижение сайтов:
<a href="http://www.inform-s.ru/">http://www.inform-s.ru/&lt;/a&gt;
Re[4]: Скачать файл с защищённого сервера
От: axon_an  
Дата: 12.08.05 07:23
Оценка:
Здравствуйте, Zip, Вы писали:

Zip>а какой пароль?


Ну это уже конфиденциальная, корпоративная информация , разглашать которую я не имею права.....
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Скачать файл с защищённого сервера
От: axon_an  
Дата: 12.08.05 07:23
Оценка:
Здравствуйте, BeeNokle, Вы писали:

BN>Здесь имеется в виду что не сам файл защищен, а доступ к нему, именно логином и паролем. Защищен средствами сервера Apache. Ну лично я это так понял...


Незнаю, но наверное вы правы.

BN>Конечно с помощью Инди. Авторизацию можно пройти указав username и password в св-ве Request:

BN>idHTTP.request.username:='';
BN>...
BN>А потом делаете постом или гетом. Лучше постом, он возвращает поток сразу, который вы и сохранишь в файл.

А можно мааахонький кусочек кода, а то я с сетями ещё никогда не работал.... плз
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Скачать файл с защищённого сервера
От: axon_an  
Дата: 12.08.05 07:51
Оценка:
Здравствуйте, BeeNokle, Вы писали:

BN>Здравствуйте, axon_an, Вы писали:


_>>Доброе время суток!


_>> Мне нужно качать файл http://users.ints.net/donalex/Ostatuli.zip три раза в день (ессно пароль и логин я знаю), как мне автоматизировать это действо? Пользую BDS2005, хотя стоит и D7. Слышал что можно с помощью библиотеки Indy, но какой именно компонент и как? Или если через Wininet, то куда там вписывать логин/пароль?


BN>Конечно с помощью Инди. Авторизацию можно пройти указав username и password в св-ве Request:


BN>idHTTP.request.username:='';

BN>...

BN>А потом делаете постом или гетом. Лучше постом, он возвращает поток сразу, который вы и сохранишь в файл.


BN>Доп. информацию найдете в справке, тем более что в D2005 они достаточно удобная, и по инди там есть информация тоже!



Я попробовал сделать так:


var
idhttp: TIdHTTP;
stream: TFileStream;
begin
 idhttp := TIdHTTP.Create(nil);
 try
   stream := TFileStream.Create('c:\Ostatuli.zip', fmCreate);
   try
     idhttp.request.username := 'my_login';
     idhttp.request.Password := 'my_password';
     idhttp.get('http://users.ints.net/donalex/Ostatuli.zip', stream);
   finally
     stream.Free;
   end;
 finally
   idhttp.Free;
 end;
end;


На что оно мне сказало:

Project raized exception class EIdHTTPProtocolExceptionwith message 'HTTP/1.0 401 Unauthorized'. Process stopped. Use Step or Run to continue.




Как ещё можно, или где сдесь баг (вариант ответа — в ДНК не устроит)?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Скачать файл с защищённого сервера
От: BeeNokle Россия  
Дата: 12.08.05 08:01
Оценка:
Здравствуйте, axon_an, Вы писали:

_>А можно мааахонький кусочек кода, а то я с сетями ещё никогда не работал.... плз


procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TFileStream;
begin
//  idHTTP.Request.Username:='..';
//  idHTTP.Request.Password:='..';
//  или
//  idHTTP.Request.Authentication.Username:='..';
//  idHTTP.Request.Authentication.Password:='..';
  Stream:= TFileStream.Create('D:\1.txt',fmCreate);
  idHTTP.get('http://yandex.ru',Stream);
  Stream.Free;
end;


Теперь в D:\1.txt хранится html-код yandex.ru.
А потом просто поиграйтесь с компонентом, чтобы все получилось. Если же не будет выходить, обращайтесь, прилагая код желательно...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Разработка и продвижение сайтов:
<a href="http://www.inform-s.ru/">http://www.inform-s.ru/&lt;/a&gt;
Re[7]: Скачать файл с защищённого сервера
От: axon_an  
Дата: 12.08.05 08:17
Оценка:
Здравствуйте, BeeNokle, Вы писали:

BN>Здравствуйте, axon_an, Вы писали:


_>>А можно мааахонький кусочек кода, а то я с сетями ещё никогда не работал.... плз


BN>
BN>procedure TForm1.Button1Click(Sender: TObject);
BN>var
BN>  Stream: TFileStream;
BN>begin
BN>//  idHTTP.Request.Username:='..';
BN>//  idHTTP.Request.Password:='..';
BN>//  или
BN>//  idHTTP.Request.Authentication.Username:='..';
BN>//  idHTTP.Request.Authentication.Password:='..';
BN>  Stream:= TFileStream.Create('D:\1.txt',fmCreate);
BN>  idHTTP.get('http://yandex.ru',Stream);
BN>  Stream.Free;
BN>end;
BN>


BN> Теперь в D:\1.txt хранится html-код yandex.ru.

BN> А потом просто поиграйтесь с компонентом, чтобы все получилось. Если же не будет выходить, обращайтесь, прилагая код желательно...


Вы наверное не заметели пост Re[2]: Скачать файл с защищённого сервера
Автор: axon_an
Дата: 12.08.05

там я пробовал этот метод и получил ошибку:

Project raized exception class EIdHTTPProtocolExceptionwith message 'HTTP/1.0 401 Unauthorized'. Process stopped. Use Step or Run to continue.


Есть ещё варианты?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Скачать файл с защищённого сервера
От: BeeNokle Россия  
Дата: 12.08.05 09:12
Оценка:
Здравствуйте, axon_an, Вы писали:

>Есть ещё варианты?


А это проходит?
idHTTP.Request.Authentication.Username:='..';
idHTTP.Request.Authentication.Password:='..';
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Разработка и продвижение сайтов:
<a href="http://www.inform-s.ru/">http://www.inform-s.ru/&lt;/a&gt;
Re[8]: Скачать файл с защищённого сервера
От: BeeNokle Россия  
Дата: 12.08.05 09:28
Оценка: 3 (1)
У idHTTP есть событие onAuthetication. Можно попробовать через него. Оно возникает при необходимости авторизации на сервере. Как написано в справке возникает до нее => мы сможем изменить необходимые данные... Не знаю, не пробовал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Разработка и продвижение сайтов:
<a href="http://www.inform-s.ru/">http://www.inform-s.ru/&lt;/a&gt;
Re[9]: Скачать файл с защищённого сервера
От: axon_an  
Дата: 12.08.05 11:08
Оценка:
Здравствуйте, BeeNokle, Вы писали:

BN>У idHTTP есть событие onAuthetication. Можно попробовать через него. Оно возникает при необходимости авторизации на сервере. Как написано в справке возникает до нее => мы сможем изменить необходимые данные... Не знаю, не пробовал.


Именно это и помогло с аутиентифкацией! НО теперь другая трабла!
Метод Get у меня закачивает только 1 кб из 386 возможных.....
Метод Post у меня закачивает 0 кб из 386 возможных.....
Что я сделал не так?
Ниже код

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdAuthentication;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure Button1Click(Sender: TObject);
    procedure IdHTTP1Authorization(Sender: TObject;
      Authentication: TIdAuthentication; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TFileStream;
begin
   Stream:= TFileStream.Create('D:\Work\Prices\Sclad\Ostatuli.zip',fmCreate);
   //idhttp1.get('http://users.ints.net/donalex/Ostatuli.zip', stream);
   idhttp1.Post('http://users.ints.net/donalex/Ostatuli.zip',stream);
   Stream.Free
end;


procedure TForm1.IdHTTP1Authorization(Sender: TObject;
  Authentication: TIdAuthentication; var Handled: Boolean);
begin
   handled:=true;
   Authentication.Username:='my_username';
   Authentication.Password:='my_password';
end;

end.


Как бороться?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Скачать файл с защищённого сервера
От: BeeNokle Россия  
Дата: 13.08.05 07:37
Оценка:
Здравствуйте, axon_an, Вы писали:

_>Как бороться?


Вот лично у меня прокатывает такой вариант, где tmp.exe — 3,59Мб а http://beenokle.ru.local — http сервер на нашей работе.

procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TStream;
begin
  Stream:=TFileStream.Create('d:\tmp.exe',fmCreate);
  idHTTP.Get('http://beenokle.ru.local/tmp.exe',Stream);
  Stream.Free;
  ShowMessage('Done');
end;


Скачивает на ура за один приход за примено 2-3 секунды.

Что может быть у вас — это как мне кажется сервер обрывает соединение.
Варианты: докачивать.
Если посмотрите то у idHTTP.Request есть такие сво-ва как ContentRangeStart и ContentRangeEnd, задающие диапозон в байтах. То есть скажем если сервер оборвал на числе скажем down, а fSize — размер файла (его можно узнать у сервера, но как не помню)
то ContentRangeStarе:=down, ContentRangeEnd:=fSize, delta:=fSize-down+1 И делаете что-то типа этого:
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream,fStream: TStream;
begin
  Stream:=TMemoryStream.Create;
    //Здесь указываете диапозон и делаете запрос снова
  idHTTP.Get('http://beenokle.ru.local/tmp.exe',Stream);
    fStream:=TFileStream.Create('d:\tmp.exe',fmWrite);
    fStream.Position:=donw;
    fStream.CopyFrom(Stream,Stream.Size);
    fStream.Free;
  Stream.Free;    
  ShowMessage('Done');
end;


По такому же механизму работают все менеджеры закачек. Посоветовал бы вам обрабатывать события при разрыве соединения...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Разработка и продвижение сайтов:
<a href="http://www.inform-s.ru/">http://www.inform-s.ru/&lt;/a&gt;
Re[11]: Скачать файл с защищённого сервера
От: axon_an  
Дата: 13.08.05 07:54
Оценка:
Здравствуйте, BeeNokle, Вы писали:

BN>Вот лично у меня прокатывает такой вариант, где tmp.exe — 3,59Мб а http://beenokle.ru.local — http сервер на нашей работе.

BN>....

ОГРОМНОЕ СПАСИБО!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.