AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi HTTP/1.1 404 Not Found umgehen?
Thema durchsuchen
Ansicht
Themen-Optionen

HTTP/1.1 404 Not Found umgehen?

Ein Thema von lucius · begonnen am 2. Dez 2005 · letzter Beitrag vom 2. Dez 2005
Antwort Antwort
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

HTTP/1.1 404 Not Found umgehen?

  Alt 2. Dez 2005, 22:42
Guten abend Leute,

Ich hole ueber die HTTP Komponente Dateien von einer PHP Seite.
Ich muss schon die HTTP Komponente benutzen weil ich mich ueber Post vorher einloggen muss.
Ich downloade die Dateien mittels diesen Code
Delphi-Quellcode:
var
  BytesKopiert, BytesInsgesamt : int64;
  lStream: TFileStream;
begin
Panel1.Visible := true;
  //Initialiesieren
  Label22.Caption := '';
  BytesKopiert := 0;
  ProgressBar2.Position := 0;
  //In edit 1 steht die downzuladene Datei (z.b. [url]http://www.server.com/datei.dat[/url])
  Label22.Caption := 'Prüfe Header';
  // Durch die zwei nächsten Befehle wird die Größe ermittelt und ihn der Variable BytesInsgesamt abgespeichert
  HTTP.Response.Clear;
  HTTP.Head(Edit3.Text);
  BytesInsgesamt := HTTP.Response.ContentLength; <-----//HTTP/1.1 404 Error//
  //Wenn die Indy Komponente -1 zurückgibt dann bedeutet es des der die Dateigröße nicht zu verfügung
  //stellt uns somit kann die Datei ganz normall heruntergeladen werden (ohne Fortschrittsanzeige)
  if BytesInsgesamt = -1 then
  begin
    Label22.Caption := 'Normalles herunterladen';
    Label23.Caption := 'Erstelle Datei';
    //In Edit 2 steht welche Datei (z.b. C:\datei.dat)
    //Datei erstellen
    lStream:=TFileStream.Create(Edit2.Text, fmCreate or fmShareDenyNone);
    try
      //und "normal" herunterladen
      HTTP.Get(Edit3.Text, lStream);
    finally
      if Assigned(lStream) then lStream.Free; //FileStream freigeben wenn gesetzt
    end;
    //Alles auf fertig stellen
    Label22.Caption := 'Fertig';
    Label23.caption := 'Fertig';
    ProgressBar2.Position := 100;
    Panel1.Visible := false;
    exit;
  end;
  //Also wenn wir hier angelangt sind dann bedeutet es der Server hat uns die Dateigröße zur Verfügung gestellt.
  ProgressBar2.Max := BytesInsgesamt;
  Label23.Caption := 'Erstelle Datei';
  //In Edit 2 steht welche Datei (z.b. C:\datei.dat)
  //Datei erstellen
  lStream:=TFileStream.Create(Edit2.Text, fmCreate or fmShareDenyNone);
  lStream.Position := 0;
  try
    repeat
      // Damit sich das Programm nicht aufhängt
      Application.ProcessMessages;
      //Nun setzen wir den Start nach die bereits kopierten Bytes
      HTTP.Request.ContentRangeStart := BytesKopiert;
      //Hier wird gebrüft ob die restlichen Bytes größer sind als cFileSplitSize
      if (BytesInsgesamt-BytesKopiert) > cFileSplitSize then
      begin
        //Hier wird einmal die cFileSplitSize eingestellt
        HTTP.Request.ContentRangeEnd := BytesKopiert+cFileSplitSize-1;
      end
      //Den rest der Datei
      else HTTP.Request.ContentRangeEnd := BytesInsgesamt;
      Application.ProcessMessages;
      //Den eingesttelten Teil herunterladen und ihn die Datei speichern
      HTTP.Get(Edit2.Text, lStream);
      //Progress und Status aktualliesieren
      ProgressBar2.Position := BytesKopiert;
      Label22.Caption := GetSizeName(BytesKopiert)+'/'+GetSizeName(BytesInsgesamt);
      //BytesKopiert weiter setzen
      BytesKopiert := BytesKopiert+cFileSplitSize;
    until (BytesKopiert >= BytesInsgesamt); //Schleife beenden wenn datei fertig
  finally
    if Assigned(lStream) then lStream.Free; //FileStream freigeben wenn gesetzt
  end;
  //Alles auf fertig stellen
  Label22.Caption := 'Fertig';
  Label23.caption := 'Fertig';
  ProgressBar2.Position := 100;
  Panel1.Visible := false;
end;
Das komische ist manche Dateien laedt er ohne Probleme runter von der Seite aber bei manchen kriege ich nen HTTP/1.1 404 Error an der markierten Stelle im Code.
Gibt es eine Moeglichkeit trotsdem die Datei zu bekommen mittels HTTP.Get?
Kann ich das irgendwie umgehen?
Herzlichen Dank im voraus.

MFG, Lucius.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: HTTP/1.1 404 Not Found umgehen?

  Alt 2. Dez 2005, 22:43
Zitat von lucius:
Das komische ist manche Dateien laedt er ohne Probleme runter von der Seite aber bei manchen kriege ich nen HTTP/1.1 404 Error an der markierten Stelle im Code.
Fehler 404 heisst Datei nicht gefunden => ergo kann er dir schlecht etwas zurückliefern. Prüfe deine Anfragen, ob diese von der Schreibweise her korrekt sind (zur Not einfach mal in deinem Browser deiner Qual eingeben).
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: HTTP/1.1 404 Not Found umgehen?

  Alt 2. Dez 2005, 22:48
Hi jim_raynor, wenn ich den link im browser oeffne laedt er die Datei die ich mit Indy nicht bekomme einfach runter.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: HTTP/1.1 404 Not Found umgehen?

  Alt 2. Dez 2005, 22:53
Zitat von lucius:
//In edit 1 steht die downzuladene Datei (z.b. http://www.server.com/datei.dat)
Zitat von lucius:
HTTP.Head(Edit3.Text);
Kann es sein, dass da irgendwas nicht zusammenpasst ...
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: HTTP/1.1 404 Not Found umgehen?

  Alt 2. Dez 2005, 22:56
Ich glaube nicht denn bei andere Dateien funktioniert es auch ueber Edit3.Text.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: HTTP/1.1 404 Not Found umgehen?

  Alt 2. Dez 2005, 23:39
Habe das Problem erkannt, in der Edit3.text kann manchmal eine Leerzeile voorkomen, die erkennt er dann nicht und plop da ist 404.
Denke das magische Wort zu meinem Problem ist stringreplace.

MFG, Lucius.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 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