2013-03-25 76 views
8

Tôi đang làm việc trên một chương trình Java triển khai ứng dụng khách HTTP. Tôi thử nghiệm nó gửi yêu cầu đến một máy chủ. Yêu cầu GET, POST và DELETE hoạt động ok. Ví dụ sau khi một yêu cầu POST tôi nhận được một sản lượngNhận "Yêu cầu chiều dài 411" sau yêu cầu PUT từ Máy khách HTTP

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

và cơ sở dữ liệu phản ánh những thay đổi được thực hiện.

Sau yêu cầu PUT, tuy nhiên tôi nhận được đánh dấu html sau của trang web cho biết có lỗi.

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> 

và không có thay đổi trong cơ sở dữ liệu.

Tôi nhận thấy rằng điều này có thể có liên quan đến tiêu đề Content-Length, nhưng tôi không chắc chắn. Sau khi cố gắng thêm tiêu đề này chương trình của tôi chờ một phút và sau đó ném một ngoại lệ thông báo rằng nó không thể xử lý phản hồi của máy chủ.

Tôi cũng có thể cung cấp bất kỳ mã hoặc theo dõi ngăn xếp nào nếu cần.

+0

Vì vậy, 'setHeader (" Content-Length "," "+ file.length())' resp. 'setContentLength ((int) file.length());' hoặc như vậy. –

+0

Tôi không muốn tải tệp lên. Chỉ cần cố gắng chuyển một URL với một loạt các tham số viên để cập nhật cơ sở dữ liệu –

+0

Độ dài nội dung 0 như @Sachin đúng nói. –

Trả lời

16

Có, sự cố liên quan đến Content-Length. Lỗi HTTP 411 có nghĩa là

Máy chủ từ chối chấp nhận yêu cầu mà không có Độ dài nội dung được xác định. Khách hàng CÓ THỂ lặp lại yêu cầu nếu nó thêm trường tiêu đề Nội dung có độ dài hợp lệ chứa chiều dài của nội dung thư trong thông báo yêu cầu.

Vì vậy, khi bạn gửi trống RequestBody trong phương thức POST/PUT thì bạn cũng cần phải gửi Content-Length:0. Vì vậy, hãy thêm tiêu đề này vào yêu cầu của bạn. Tôi không nghĩ rằng tiêu đề này sẽ gây ra một vấn đề của bạn thêm vào đối tượng yêu cầu.

+1

Tôi đã thử điều này, những gì tôi nhận được trong trường hợp này là 'Dữ liệu được trích xuất: {"trạng thái": {"nội dung": "Loại nội dung'/octet-stream 'không được hỗ trợ"}} 'và vẫn không có thay đổi trong cơ sở dữ liệu –

+0

Đây là một vấn đề khác liên quan đến loại Nội dung. Có thể máy chủ của bạn không báo cáo loại mime thích hợp hoặc không được hỗ trợ kiểu nội dung này – Sachin

+0

Tôi liên lạc với máy chủ và họ thông báo với tôi rằng họ đã kiểm tra cùng một yêu cầu PUT và nó hoạt động với việc triển khai HTTP Client. Vấn đề là tôi sử dụng một nền tảng Java ME chuyên dụng và tôi cho rằng có một lỗi trong phiên bản HTTP Client của tôi. Những gì tôi không thể hiểu là làm thế nào nó làm việc với POST sau đó? –

Các vấn đề liên quan