Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datei herunterladen mit ClientSocket (https://www.delphipraxis.net/113968-datei-herunterladen-mit-clientsocket.html)

Nils_13 17. Mai 2008 13:49


Datei herunterladen mit ClientSocket
 
Hi,

ich möchte eine Datei (zum Beispiel die index.html/php) mit einem ClientSocket runterladen. Welchen Befehl muss ich dafür verwenden ?
Delphi-Quellcode:
Socket.SendText('GET ./index.html'+#13#10);
Liefert mir folgendes Ergebnis:
Zitat:

14:35:48 >> Verbindung aufgebaut
14:35:48 >> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
14:35:48 >> <html><head>
14:35:48 >> <title>400 Bad Request</title>
14:35:48 >> </head><body>
14:35:48 >> <h1>Bad Request</h1>
14:35:48 >>

Your browser sent a request that this server could not understand.

14:35:48 >> </p>
14:35:48 >> <hr>
14:35:48 >> <address>Apache Server at 127.0.0.1 Port 80</address>
14:35:48 >> </body></html>

marabu 17. Mai 2008 14:50

Re: Datei herunterladen mit ClientSocket
 
Hi,

das muss wohl etwas anders aussehen:

Code:
GET /index.html HTTP/1.1
Es fehlen auch noch ein paar HTTP Header - vor allem "Host", wenn du keinen absoluten URI angibst. Ganz genau geregelt ist das hier: RFC 2616 :: Request

Bei der Analyse der Kommunikation kann dir das Plugin LiveHTTPheaders für FireFox helfen.

Grüße vom marabu

Nils_13 17. Mai 2008 14:58

Re: Datei herunterladen mit ClientSocket
 
Habe das gerade mal an der DP durchgespielt und laut dem Addon müsste es so gehen:
Delphi-Quellcode:
Socket.SendText('GET /index.html HTTP/1.1'+#13#10+'Host: www.delphipraxis.net'+#13#10);
Es kommt allerdings keine Antwort.

marabu 17. Mai 2008 16:04

Re: Datei herunterladen mit ClientSocket
 
Warum auch - du hast ja dem Server auch nicht gemeldet, dass deine Anfrage vollständig übermittelt wurde.

Delphi-Quellcode:
const
  HOST_NAME = 'www.delphipraxis.net';

procedure TDemoForm.Button1Click(Sender: TObject);
begin
  Memo.Clear;
  with ClientSocket do
  begin
    //ClientType := ctNonBlocking;
    Host := HOST_NAME;
    Service := 'http';
    Open;
    Write;
  end;
end;

procedure TDemoForm.ClientSocketWrite(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Socket.SendText('GET / HTTP/1.1' + sLineBreak);
  Socket.SendText('Host: ' + HOST_NAME + sLineBreak);
  Socket.SendText(sLineBreak);
end;

procedure TDemoForm.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo.Lines.Text := Memo.Text + Socket.ReceiveText;
end;
Freundliche Grüße

Nuclear-Ping 17. Mai 2008 16:20

Re: Datei herunterladen mit ClientSocket
 
Zitat:

Zitat von Nils_13
Habe das gerade mal an der DP durchgespielt und laut dem Addon müsste es so gehen:
Delphi-Quellcode:
Socket.SendText('GET /index.html HTTP/1.1'+#13#10+'Host: www.delphipraxis.net'+#13#10);
Es kommt allerdings keine Antwort.

Du solltest dich mal mit dem HTTP-Protokoll beschäftigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz