У idHTTP есть событие onAuthetication. Можно попробовать через него. Оно возникает при необходимости авторизации на сервере. Как написано в справке возникает до нее => мы сможем изменить необходимые данные... Не знаю, не пробовал.
Мне нужно качать файл http://users.ints.net/donalex/Ostatuli.zip три раза в день (ессно пароль и логин я знаю), как мне автоматизировать это действо? Пользую BDS2005, хотя стоит и D7. Слышал что можно с помощью библиотеки Indy, но какой именно компонент и как? Или если через Wininet, то куда там вписывать логин/пароль?
Здравствуйте, axon_an, Вы писали:
_>Доброе время суток!
_> Мне нужно качать файл http://users.ints.net/donalex/Ostatuli.zip три раза в день (ессно пароль и логин я знаю), как мне автоматизировать это действо? Пользую BDS2005, хотя стоит и D7. Слышал что можно с помощью библиотеки Indy, но какой именно компонент и как? Или если через Wininet, то куда там вписывать логин/пароль?
Конечно с помощью Инди. Авторизацию можно пройти указав username и password в св-ве Request:
idHTTP.request.username:='';
...
А потом делаете постом или гетом. Лучше постом, он возвращает поток сразу, который вы и сохранишь в файл.
Доп. информацию найдете в справке, тем более что в D2005 они достаточно удобная, и по инди там есть информация тоже!
Слова, пустые слова, подумал Стормгрен. Слова, за которые прежде люди дрались и умирали, но никогда больше не станут за них ни умирать, ни драться. И от этого мир станет лучше.
Здравствуйте, neiroman, Вы писали:
N>А чем он хоть защищен ?
Для того чтобы скачать этот файл, необходимо ввести логин/пароль. Чем защищён я не знаю, нажми на ссылку, может ты посмотришь? http://users.ints.net/donalex/Ostatuli.zip
Здесь имеется в виду что не сам файл защищен, а доступ к нему, именно логином и паролем. Защищен средствами сервера Apache. Ну лично я это так понял...
Здравствуйте, BeeNokle, Вы писали:
BN>Здесь имеется в виду что не сам файл защищен, а доступ к нему, именно логином и паролем. Защищен средствами сервера Apache. Ну лично я это так понял...
Незнаю, но наверное вы правы.
BN>Конечно с помощью Инди. Авторизацию можно пройти указав username и password в св-ве Request: BN>idHTTP.request.username:=''; BN>... BN>А потом делаете постом или гетом. Лучше постом, он возвращает поток сразу, который вы и сохранишь в файл.
А можно мааахонький кусочек кода, а то я с сетями ещё никогда не работал.... плз
Здравствуйте, 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 они достаточно удобная, и по инди там есть информация тоже!
Теперь в D:\1.txt хранится html-код yandex.ru.
А потом просто поиграйтесь с компонентом, чтобы все получилось. Если же не будет выходить, обращайтесь, прилагая код желательно...
Здравствуйте, BeeNokle, Вы писали:
BN>Здравствуйте, axon_an, Вы писали:
_>>А можно мааахонький кусочек кода, а то я с сетями ещё никогда не работал.... плз
BN>
BN> Теперь в D:\1.txt хранится html-код yandex.ru. BN> А потом просто поиграйтесь с компонентом, чтобы все получилось. Если же не будет выходить, обращайтесь, прилагая код желательно...
Здравствуйте, 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.
Вот лично у меня прокатывает такой вариант, где 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;
По такому же механизму работают все менеджеры закачек. Посоветовал бы вам обрабатывать события при разрыве соединения...
Здравствуйте, BeeNokle, Вы писали:
BN>Вот лично у меня прокатывает такой вариант, где tmp.exe — 3,59Мб а http://beenokle.ru.local — http сервер на нашей работе. BN>....