Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#8

AW: IdHTTP Post Request -> dann Zeit abwarten bis Response

  Alt 26. Jun 2017, 22:34
Ok, die Aufgabenstellung klingt vernünftig, da hab' ich dann nix mehr zu meckern

Hier ein Quelltext, den ich für idHTTP.Get nutze, mit ein bisserl Fehlertoleranz:
Delphi-Quellcode:
function MyHTTPGet(sURL : String; slHTML : TStrings; slAHRef : TStrings; var sMessage : String; iRedirect : Integer) : Boolean;
var
          iError : Integer;
begin
  Result := False;
  sMessage := 'ok';
  dmPascalScript.WebIndex.Clear;
  slHTML.Clear;
  slAHref.Clear;
  iError := 0;
  repeat
    try
      dmPascalScript.http.RedirectMaximum := iRedirect;
      dmPascalScript.http.HandleRedirects := iRedirect <> 0;
      dmPascalScript.WebIndex.HTML.Add(dmPascalScript.http.Get(sUrl));
      dmPascalScript.http.Disconnect(True);
      dmPascalScript.http.IOHandler.InputBuffer.Clear;
      Result := True;
    except
      on e : Exception do begin
        sMessage := AnsiReplaceText(e.Message,#13#10,' ');
        if e.Message = 'Connection Closed Gracefully.then begin
          Inc(iError);
        end else begin
          iError := MaxInt;
          case dmPascalScript.http.ResponseCode of
            301, 302 : begin
                    dmPascalScript.PSReg.WriteAppLog(Format('Scriptaufruf : HTTPGet(%s)',[sUrl]));
                    dmPascalScript.PSReg.WriteAppLog(Format('Fehlermeldung: %s',[sMessage]));
                    dmPascalScript.PSReg.WriteAppLog(Format('Location : %s',[dmPascalScript.http.Response.Location]));
                  end;
          else
            dmPascalScript.PSReg.WriteAppLog(Format('Scriptaufruf : HTTPGet(%s)',[sUrl]));
            dmPascalScript.PSReg.WriteAppLog(Format('Fehlermeldung: %s',[sMessage]));
            dmPascalScript.PSReg.WriteAppLog(Format('ResponseCode : %d',[dmPascalScript.http.ResponseCode]));
          end;
        end;
        dmPascalScript.http.Disconnect(True);
        dmPascalScript.http.IOHandler.InputBuffer.Clear;
      end;
    end;
  until Result or (iError > 4);
  if Result then begin
    dmPascalScript.WebIndex.PrepareHtmlText;
    dmPascalScript.WebIndex.GetHeader;
    dmPascalScript.WebIndex.GetBody;
    dmPascalScript.WebIndex.GetAHRef;
    slHTML.AddStrings(dmPascalScript.WebIndex.HTML);
    slAHRef.AddStrings(dmPascalScript.WebIndex.AHRef);
  end;
end;
WebIndex ist ein Parser, der den Quelltext der HTML-Seiten in eine Form umwandelt, die eine (halbwegs) automatische Weiterverarbeitung zulässt.

dmPascalScript ist ein Datenmodul, dessen Komponenten genutzt werden.

slHTML enthält den aufbereiteten Inhalt der Webseite, slAHref enthält alle in der Webseite gefundenen Links.

Die Routine selbst wird über Pascalscript aus 'nem Programm aufgerufen, dass u. a. der automatischen Auswertung von Webseiten dient.

In dem Case-Block könntest Du dann eventuell noch die 503 abfragen. und da ein Sleep einbauen.

Schau mal bitte, ob der von Dir gesuchte Inhalt eventuell in idhttp.ResponseText zu finden ist. idHTTP.ResponseCode müsste die 503 enthalten.

Hast Du mal geschaut, ob in der Variabel, in die Du mit idHTTP.Get('url') den Inhalt der Webseite bekommen kannst, nicht auch im Fehlerfalle was drinne steht.

Hier im Beispiel müsste dann der Quelltext der Fehlerseite in slHTML zu finden sein.
  Mit Zitat antworten Zitat