Curl POST - Yêu cầu độ dài 411


29

Chúng tôi có API RestFUL mà chúng tôi xây dựng bằng PHP. Nếu chúng tôi thực hiện yêu cầu:

curl -u api-key:api-passphrase https://api.domain.com/v1/product -X POST

Chúng tôi quay trở lại:

411 - Length Required

Mặc dù nếu chúng ta chỉ cần thêm -d ""vào yêu cầu thì nó vẫn hoạt động và không có lỗi 411. Có cách nào để không yêu cầu thêm -d vào lệnh curl không?

Chúng tôi đang sử dụng máy chủ web lighttpd và tin rằng lighttpd KHÔNG phải php đang trả về lỗi 411.

Câu trả lời:


47

Bạn đã đúng - lighttpd không hỗ trợ các yêu cầu POST với phần thân thông báo trống mà không có tiêu đề 'Độ dài nội dung' được đặt thành 0 và CURL gửi yêu cầu như vậy. Có tranh luận qua lại về việc ai đúng, nhưng theo tôi, lighttpd đã bị phá vỡ. POST không có Độ dài nội dung và không mã hóa chuyển là hoàn toàn hợp pháp và không có nội dung thư.

Thêm -d ""nguyên nhân CURL để gửi một Content-Length: 0tiêu đề, giải quyết vấn đề.

Bạn có thể sửa đổi lighttp. Tìm mã gây ra lỗi 411 và thay vào đó đặt độ dài nội dung thành 0.


Cảm ơn lời giải thích tuyệt vời, vì vậy không có cờ nào để chuyển sang cuộn tròn bên cạnh -d ""hoặc chỉ thị cấu hình lighttpd để đặt? -d ""trông giống như một hack.
Justin

1
Nó là một hack. Nếu bạn muốn khắc phục sự cố thực sự, bạn phải sửa đổi lighttpd. Thay vào đó bạn có thể sử dụng -d @/dev/nullnếu bạn nghĩ rằng nó trông tốt hơn. Bạn cũng có thể sử dụng -H "Content-Length: 0". (Tôi đã thử nghiệm cả hai thứ này, chúng đều hoạt động.)
David Schwartz

Được rồi cảm ơn. -d ""dường như là lựa chọn tốt nhất
Justin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.