Entwickler-Ecke

Internet / Netzwerk - Fehler 406 bei Anfrage auf Webserver mit Indy


Geri - Sa 03.01.09 17:33
Titel: Fehler 406 bei Anfrage auf Webserver mit Indy
Hallo zusammen

Ich möchte mit Hilfe von INDY von einem Webserver eine Textdatei downloaden. Das funktioniert. Je nach Webserver erhalte ich aber eine Fehlermeldung 406, not acceptable. Mit dem Internet-Explorer erhalte ich jedoch keine Fehlermeldung.

Ich vermute es liegt an einer falschen Parametrrieung der Komponente TidHTTP. Habt ihr vielleicht eine Idee "an welche Rädchen ich hier drehen muss bzw. zusätzlich was angeben muss"?

Hier der Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);

var HTTP: TIdHTTP; httpcode : string;  
begin  
  HTTP := TIdHTTP.Create;
  try
    Http.Request.Accept := 'text/html/,txt,*/*';
    Memo1.Text := HTTP.Get('http://www.google.at/index.html');
  finally
    HTTP.Free;  
  end;  
end;


Vielen Dank für Eure Hilfe im Voraus

Geri


jaenicke - Sa 03.01.09 17:45

Der Fehler bedeutet, dass die von dir angegebenen Möglichkeiten, was du als Client an Datentypen vom Server akzeptieren kannst, nicht mit der übereinstimmt, die der Server sendet.
Und deshalb teilt dir diese Fehlermeldung mit, dass die zurückgesendeten Daten von dir als nicht akzeptierbar angegeben wurden.

Definiere einfach nicht das Accept, und dann kommt die Fehlermeldung auch nicht. ;-)

// EDIT:
Oder entferne das / am Ende von text/html, ich vermute das löst den Fehler aus, denn den Typ "text/html/" gibt es nicht, nur "text/html", wie es auch im Header zurückgegeben wird.


Geri - Sa 03.01.09 17:53

Hallo Sebastian

Vielen Dank für Deine Hilfe. Ich habe beide Varianten getestet, jedoch immer noch das gleiche Problem :(


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
 var HTTP: TIdHTTP; httpcode : string;
begin
  HTTP := TIdHTTP.Create;
  try
//    Http.Request.Accept := 'text/html,txt,*/*';
    Memo1.Text := HTTP.Get('http://www.burger-web.com/Updates.txt');
  finally
    HTTP.Free;
  end;
end;

Beste Grüsse

Geri


jaenicke - Sa 03.01.09 18:06

Dieser Server erwartet einen angegebenen UserAgent, also welcher Browser zugreift.

Delphi-Quelltext
1:
2:
    Http.Request.UserAgent := 'My own';
    Memo1.Text := HTTP.Get('http://www.burger-web.com/Updates.txt');
Du kannst auch so tun als ob du der FF wärst o.ä., aber der Server akzeptiert auch eine solche Fantasieangabe. ;-)


Geri - Sa 03.01.09 18:14

Du bist genial :idea:. Super, vielen Dank für deine kompetente und rasche Hilfe!!! :beer: