Autor Beitrag
pc-crack
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 12.02.10 22:30 
ich möchte auf einen http-server aber dieser liefert nicht immer ein Ergebnis wieder. bei einem falschen Aufruf kommt ein Fehlermeldung (Zugendes wenn ich es mit einem Exporer mache).

ich nutze TIdHTTP aber beim Aufruf kommt dann immer "HTTP/1.1 500 Internal Server Error" und die Routine wird abgebrochen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 13.02.10 08:16 
user profile iconpc-crack hat folgendes geschrieben Zum zitierten Posting springen:
ich nutze TIdHTTP aber beim Aufruf kommt dann immer "HTTP/1.1 500 Internal Server Error" und die Routine wird abgebrochen.
Das hört sich danach an als würdest du den Fehler nicht richtig abfangen, wie sieht denn dein Code aus?

Normal wäre ja so etwas, wenn man trotz Fehler weitermachen will:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
uses
  IdHttp;

var
  HttpLoader: TIdHttp;
  PageContents: String;
begin
  HttpLoader := TIdHttp.Create;
  try
    try
      PageContents := HttpLoader.Get('http://www.example.com');
    except
      if Application.MessageBox('Fehler, trotzdem weitermachen?', ...) <> mrYes then
        raise;
    end;
    ShowMessage('Weitergemacht');
    ...
  finally
    HttpLoader.Free;
  end;
end;
Der Fehler wird abgefangen und angezeigt, wenn nicht fortgesetzt werden soll aber wieder ausgelöst, damit direkt der Rest übersprungen und finally ausgeführt wird zum Aufräumen.

In Delphi wird die Exception natürlich dennoch angezeigt, wenn das nicht ausgeschaltet ist und das Programm aus Delphi mir Debugger gestartet wird. Aber beim separat gestarteten Programm sieht man nix mehr.
pc-crack Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 13.02.10 21:28 
wenn es den so einfach wäre...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
function TIdHTTPProtocol.ProcessResponse(AIgnoreReplies: array of SmallInt): TIdHTTPWhatsNext;

  procedure CheckException(AResponseCode: Integer; ALIgnoreReplies: array of Smallint;
    AUnexpectedContentTimeout: Integer = IdTimeoutDefault);
  var
    i: Integer;
    LTempResponse: TMemoryStream;
    LTempStream: TStream;
  begin
    LTempResponse := TMemoryStream.Create;
    LTempStream := Response.ContentStream;
    Response.ContentStream := LTempResponse;
    try
      FHTTP.ReadResult(Response, AUnexpectedContentTimeout);
      if High(ALIgnoreReplies) > -1 then begin
        for i := Low(ALIgnoreReplies) to High(ALIgnoreReplies) do begin
          if AResponseCode = ALIgnoreReplies[i] then begin
            Exit;
          end;
        end;
      end;
      LTempResponse.Position := 0;
//      raise EIdHTTPProtocolException.CreateError(AResponseCode, FHTTP.ResponseText, ReadStringFromStream(LTempResponse, -1, ContentTypeStrToEncoding(FHTTP.Response.FContentType)));
    finally
      Response.ContentStream := LTempStream;
      FreeAndNil(LTempResponse);
    end;
  end;



Der auskommentiere teil der idHTTP sorgt dafür das zumindest kein Fehler mehr kommt. selbst

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
      try
        raise EIdHTTPProtocolException.CreateError(AResponseCode, FHTTP.ResponseText, ReadStringFromStream(LTempResponse, -1, ContentTypeStrToEncoding(FHTTP.Response.FContentType)));
      finally

      end;


hilft nicht

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

ich muss nur den Fehler 500 separat behandeln...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
.
.
.
    // 304 (not modified) responses must not include a body. All other
    // responses must include an entity body or a Content-Length header
    // field defined with a value of zero (0).

    if LResponseDigit <> 2 then
    begin
      case LResponseCode of
        500begin end;  // <<-------------------------
        401:
          begin // HTTP Server authorization required
            if (FHTTP.AuthRetries >= FHTTP.MaxAuthRetries) or
               (not FHTTP.DoOnAuthorization(Request, Response)) then
            begin
              if Assigned(Request.Authentication) then begin
                Request.Authentication.Reset;
              end;
              CheckException(LResponseCode, AIgnoreReplies);
              Result := wnJustExit;
              Exit;
            end else begin
              LNeedAuth := hoInProcessAuth in FHTTP.HTTPOptions;
            end;
          end;
        407:
...