2013-03-25 9 views
8

Pracuję nad programem Java, który implementuje klienta HTTP. Testuję to wysyłając żądania do serwera. Żądania GET, POST i DELETE działają poprawnie. Na przykład po żądaniu POST mam wyjścieUzyskiwanie "Wymagana długość 411" po żądaniu PUT od klienta HTTP

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

a baza danych odzwierciedla zmiany.

Po żądaniu PUT otrzymuję jednak następujący znacznik HTML strony internetowej wskazujący błąd.

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> 

i odpowiednio brak zmian w bazie danych.

Znalazłem, że może to mieć coś wspólnego z nagłówkiem Content-Length, ale nie jestem pewien. Po próbie dodania tego nagłówka mój program czeka na minutę, a następnie generuje wyjątek informujący, że nie mógł obsłużyć odpowiedzi serwera.

Potrafię również podać kod lub ślad stosu, jeśli to konieczne.

+0

Tak więc 'setHeader (" Content-Length "," "+ file.length())' resp. 'setContentLength ((int) file.length());' lub inaczej. –

+0

Nie chcę przesyłać pliku. Po prostu próbuje przekazać adres URL z kilkoma parametrami, aby zaktualizować bazę danych. –

+0

Długość treści 0 jako @ Sachin słusznie powiedział. –

Odpowiedz

16

Tak, problem związany z Content-Length. Błąd HTTP 411 oznacza

Serwer odmawia przyjęcia żądania bez zdefiniowanej długości treści. Klient MOŻE powtórzyć żądanie, jeśli dodaje prawidłowe pole nagłówka Content-Length zawierające długość treści wiadomości w wiadomości żądania.

Więc kiedy wysłać pustego RequestBody w POST/PUT Metoda wtedy trzeba także wysłać Content-Length:0. Dodaj ten nagłówek do swojej prośby. Nie sądzę, aby ten nagłówek spowodował problem z Tobą dodany do obiektu żądania.

+1

Próbowałem również tego, co otrzymam w tym przypadku: 'Wyodrębniony dane: {" status ": {" message ":" Typ zawartości "aplikacja/strumień-oktetu" nieobsługiwany "}}' i wciąż brak zmian w bazie danych –

+0

To kolejny problem związany z typem zawartości. Możliwe, że twój serwer nie zgłasza odpowiednich typów MIME lub nie obsługuje tego typu zawartości. – Sachin

+0

Skontaktowałem się z serwerem i poinformowano mnie, że przetestowano to samo żądanie PUT i działa ono z ich implementacją klienta HTTP. Chodzi o to, że używam dedykowanej platformy Java ME i zakładam, że jest błąd w mojej wersji klienta HTTP. Czego nie rozumiem, to jak to działa z POST? –

Powiązane problemy