2013-03-25 16 views
8

Ich arbeite an einem Java-Programm, das einen HTTP-Client implementiert. Ich teste das Senden von Anfragen an einen Server. GET, POST und DELETE-Anfragen funktionieren in Ordnung. Zum Beispiel nach einer POST-Anfrage erhalte ich eine Ausgabe"411 Length Required" nach einer PUT-Anfrage vom HTTP-Client erhalten

Data extracted: 
{"status":{"message":"ok"}} 

und die Datenbank spiegelt die vorgenommenen Änderungen.

Nach einer PUT-Anfrage bekomme ich jedoch das folgende HTML-Markup einer Webseite, das einen Fehler anzeigt.

Data extracted: 
<html> 
<head><title>411 Length Required</title></head> 
<body bgcolor="white"> 
<center><h1>411 Length Required</h1></center> 
<hr><center>nginx/1.2.6</center> 
</body> 
</html> 

und dementsprechend keine Änderungen in der Datenbank.

Ich fand, dass dies etwas mit dem Content-Length-Header zu tun haben kann, aber ich bin mir nicht sicher. Nach dem Versuch, diesen Header hinzuzufügen, wartet mein Programm eine Minute lang und löst dann eine Ausnahme aus, die besagt, dass es die Serverantwort nicht verarbeiten kann.

Ich kann auch Code oder Stack-Trace bei Bedarf bereitstellen.

+0

Also 'setHeader (" Inhalt-Länge "," "+ file.length())" resp. 'setContentLength ((int) file.length());' oder so. –

+0

Ich möchte keine Datei hochladen. Nur versuchen, eine URL mit einer Reihe von Parametern zu übergeben, um die Datenbank zu aktualisieren –

+0

Inhalt Länge 0 wie @Sachin richtig gesagt. –

Antwort

16

Ja, das Problem bezogen auf Content-Length. HTTP Error 411 bedeutet

Der Server verweigert die Annahme der Anfrage ohne eine definierte Content-Length. Der Client kann die Anforderung wiederholen, wenn er ein gültiges Inhaltslängen-Header-Feld hinzufügt, das die Länge des Nachrichtentexts in der Anforderungsnachricht enthält.

Also, wenn Sie eine leere RequestBody in POST/PUT-Methode senden, dann müssen Sie auch Content-Length:0 senden. Fügen Sie diesen Header in Ihre Anfrage ein. Ich glaube nicht, dass dieser Header ein Problem verursacht, das Sie zu Request Object hinzugefügt haben.

+1

Ich habe das auch versucht, was ich in diesem Fall bekomme ist Daten extrahiert: {"status": {"message": "Inhaltstyp 'application/octet-stream' nicht unterstützt"}} 'und immer noch keine Änderungen in der Datenbank –

+0

Dies ist ein weiteres Problem, das sich auf den Inhaltstyp bezieht. Es kann möglich sein, dass Ihr Server die richtigen MIME-Typen nicht meldet oder diesen Inhaltstyp nicht unterstützt – Sachin

+0

Ich kontaktierte den Server und sie informierten mich, dass sie dieselbe PUT-Anfrage getestet haben und sie mit ihrer Implementierung von HTTP Client funktioniert. Die Sache ist, dass ich eine dedizierte Java ME-Plattform verwende und ich vermute, dass es einen Fehler in meiner Version von HTTP Client gibt. Was ich nicht verstehen kann ist, wie funktioniert es dann mit POST? –