[delphi]Problem z pobieraniem pliku

0

Mam Delphi 7 i WinXP. Probuje pobrac plik HTML z internetu przy pomocy komponentu HTTPGet. Nie ma zadnych bledow, a jednak plik na dysku ma 0 bajtow, czyli po prostu sie nie pobral. Uzywam takiego kodu:

 HTTPGet.URL := Edit1.Text;
 HTTPGet.FileName := Edit2.Text;
 HTTPGet.GetFile;

Czy ktos moze wie jak rozwiazac ten problem?

0

A może spróbuj użyc funkcji URLDownloadToFile z biblioteki URLMon?

0

Mozesz sciagnac plik takze za Pomoca funkcji UrlDownloadToFile

uses
URLMon, ShellApi;

function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
// URL Location
SourceFile = 'http://www.google.com/intl/de/images/home_title.gif';
// Where to save the file
DestFile = 'c:\temp\google-image.gif';
begin
if DownloadFile(SourceFile, DestFile) then
begin
ShowMessage('Download succesful!');
// Show downloaded image in your browser
ShellExecute(Application.Handle, PChar('open'), PChar(DestFile),
PChar(''), nil, SW_NORMAL)
end
else
ShowMessage('Error while downloading ' + SourceFile)
end;

Tylko funkcja ta ma jedna podstawowa wade pierw sprawdza czy sciagany plik nie znajduje sie w cashu jesli tak to pobiera go z tamtad.

0

A zerknij na ten kodzik - zrobiłem go kiedyś w celu przetestowania jak działa
komponent HTTPget
No i działa u mnie na bez zarzutów.
<delphi>

unit HTTPGetTestForm;
INTERFACE
Uses
HTTPGet,
ShellApi,modTools, Dialogs, StdCtrls, ExtCtrls, Controls, Classes,
ComCtrls, Windows, SysUtils, Forms;

Type
TForm1 = class(TForm)
ProgressBar: TProgressBar;
Panel1: TPanel;
Image: TImage;
HTTPGetPicture: THTTPGet; //1 komponent do obrazka
btnPobierzObrazek: TButton;
btnPobierzText: TButton;
Bevel1: TBevel;
GroupBox1: TGroupBox;
EditURL: TEdit;
Label2: TLabel;
Label4: TLabel;
EditFile: TEdit;
btnPobierzPlik: TButton;
HTTPGetString: THTTPGet; //2 komponent do tekstu
HTTPGetFile: THTTPGet; //3 komponent do plików
ComboAdres: TComboBox;
labAkcja: TLabel;
PROCEDURE HTTPGetPictureDoneFile(Sender: TObject; FileName: String; FileSize: Integer);
PROCEDURE HTTPGetPictureError(Sender: TObject);
PROCEDURE HTTPGetPictureProgress(Sender: TObject; TotalSize, Readed: Integer);
PROCEDURE btnPobierzObrazekClick(Sender: TObject);
PROCEDURE btnPobierzTextClick(Sender: TObject);
PROCEDURE HTTPGetStringDoneString(Sender: TObject; Result: String);
PROCEDURE btnPobierzPlikClick(Sender: TObject);
PROCEDURE HTTPGetFileDoneFile(Sender: TObject; FileName: String; FileSize: Integer);
PROCEDURE btnPokazClick(Sender: TObject);
PROCEDURE HTTPGetStringProgress(Sender: TObject; TotalSize,
Readed: Integer);
PROCEDURE HTTPGetStringError(Sender: TObject);
procedure HTTPGetFileError(Sender: TObject);
procedure HTTPGetFileProgress(Sender: TObject; TotalSize,
Readed: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
zdanie :String;
lista :TStringList;
implementation {$R .DFM}
{*****************************************************************************}
{============================== Pobranie obrazka =============================}
PROCEDURE TForm1.btnPobierzObrazekClick(Sender: TObject);
Begin
HTTPGetPicture.BinaryData:= True; //ustawia na typ pliku binarnego
HTTPGetPicture.WaitThread:= False; //czas oczekiwania - do skutku
HTTPGetPicture.FileName:= 'obrazek.bmp'; //nazwa pliku po ściągnięciu
HTTPGetPicture.URL:= ComboAdres.Text; pobranie adresu URL
HTTPGetPicture.GetFile; //wywołanie pobrania pliku
labAkcja.Caption:= 'Czekaj trwa pobieranie...';
End;
{------------------------------- Pasek postępu -------------------------------}
PROCEDURE TForm1.HTTPGetPictureProgress(Sender: TObject; TotalSize, Readed: Integer);
Begin
ProgressBar.Max:= TotalSize; //wielkość pliku
ProgressBar.Position:= Readed; //ilość już zapisanych bajtów
End;
{------------------ Procedura wykonywana po pobraniu pliku -------------------}
PROCEDURE TForm1.HTTPGetPictureDoneFile(Sender: TObject; FileName: String; FileSize: Integer);
Begin
ProgressBar.Position:= 0; //zeruje pasek postępu ściągania pliku
labAkcja.Caption:= 'Gotowe';
Beep;
Image.Picture.LoadFromFile(FileName); //wczytanie pliku do komponentu image
End;
{----------------- Procedura wykonywana po wystąpieniu błędu -----------------}
PROCEDURE TForm1.HTTPGetPictureError(Sender: TObject);
Begin
ShowMessage('Uwaga błąd pobierania !');
End;
{============================== Pobranie tekstu ==============================}
PROCEDURE TForm1.btnPobierzTextClick(Sender: TObject);
Begin
HTTPGetString.BinaryData:= False; //ustawia na typ pliku textowego
HTTPGetString.WaitThread:= False; //czas oczekiwania - do skutku
HTTPGetString.FileName:= 'Strona.htm'; //nazwa pliku po ściągnięciu
HTTPGetString.URL:= ComboAdres.Text; //pobranie adresu URL
HTTPGetString.GetString; //wywołanie pobrania textu
labAkcja.Caption:= 'Czekaj trwa pobieranie...';
End;
{------------------------------- Pasek postępu -------------------------------}
PROCEDURE TForm1.HTTPGetStringProgress(Sender: TObject; TotalSize,
Readed: Integer);
Begin
ProgressBar.Max:= TotalSize;
ProgressBar.Position:= Readed;
End;
{------------------ Procedura wykonywana po pobraniu pliku -------------------}
PROCEDURE TForm1.HTTPGetStringDoneString(Sender: TObject; Result: String);
Begin
ProgressBar.Position:= 0; //zeruje pasek postępu ściągania pliku
labAkcja.Caption:= 'Gotowe';
Beep;
lista:=TStringList.Create;
lista.Add(Result);
lista.SaveToFile('Strona.htm');
labAkcja.Caption:= 'Gotowe';
ShowMessage(Result);
End;
{----------------- Procedura wykonywana po wystąpieniu błędu -----------------}
PROCEDURE TForm1.HTTPGetStringError(Sender: TObject);
Begin
ShowMessage('Uwaga błąd pobierania !');
End;
{=============================== Pobranie pliku ==============================}
PROCEDURE TForm1.btnPobierzPlikClick(Sender: TObject);
Begin
HTTPGetFile.BinaryData:= True; //ustawia na typ pliku binarnego
HTTPGetFile.WaitThread:= False; //czas oczekiwania - do skutku
HTTPGetFile.FileName:= EditFile.Text; //nazwa pliku po ściągnięciu
HTTPGetFile.URL:= EditURL.Text; //pobranie adresu URL
HTTPGetFile.GetFile; //wywołanie pobrania pliku
labAkcja.Caption:= 'Czekaj trwa pobieranie...';
End;
{------------------------------- Pasek postępu -------------------------------}
procedure TForm1.HTTPGetFileProgress(Sender: TObject; TotalSize,
Readed: Integer);
Begin
ProgressBar.Max:= TotalSize;
ProgressBar.Position:= Readed;
End;
{------------------ Procedura wykonywana po pobraniu pliku -------------------}
PROCEDURE TForm1.HTTPGetFileDoneFile(Sender: TObject; FileName: String; FileSize: Integer);
Begin
ProgressBar.Position:= 0; //zeruje pasek postępu ściągania pliku
labAkcja.Caption:= 'Gotowe';
Beep;
ShowMessage('Zapisany jako: ' + FileName + #13#10 +
'Rozmiar: ' + IntToStr(FileSize) + ' bytes');
End;
{----------------- Procedura wykonywana po wystąpieniu błędu -----------------}
procedure TForm1.HTTPGetFileError(Sender: TObject);
Begin
ShowMessage('Uwaga błąd pobierania !');
End;
{=============================================================================}
PROCEDURE TForm1.btnPokazClick(Sender: TObject);
begin
ShellExecute(GetDesktopWindow,'open',PChar('strona.htm'),nil,nil,SW_SHOWNORMAL);
End;
//
*************************************************************************
END.

0

Chętnie bym użył HTTPGet, ale na moim Delphi7 Personal otrzymuję takie oto błędy:

HTTPGet class not found!</B>

Oczywiście w uses mam dopisane HTTPGet

Czy ktoś wie jak to rozwiązać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1