2010-09-09 43 views
15

Tôi đang cố đăng thông tin lên API trên dự án web mà tôi đã tạo và lưu trữ. Tôi không chắc định dạng chính xác cho yêu cầu HTTP POST là gì. Mỗi lần tôi thử, tôi nhận được lỗi HTTP 400 với thông báo rằng có "động từ không hợp lệ".Thực hiện yêu cầu HTTP POST bằng cách sử dụng Arduino

mẫu:

byte server[] = {"our IP"} 
.. 
.. 

client(server, 80) 
.. 
.. 
client.println("POST /Api/AddParking/3"); 

Nó kết nối tới địa chỉ IP được cung cấp mà không cần bất kỳ vấn đề, nhưng tất cả tôi nhận được trở lại trong HTTP mã lỗi nêu trên 400. Tôi không chắc chắn nếu tôi phải bao gồm Phiên bản HTTP sau POST hoặc Nội dung dài của tôi hoặc bất kỳ thông tin nào khác.

Trả lời

2

Gửi các gói HTTP thủ công có thể hơi phức tạp một chút vì chúng cực kỳ cầu kỳ về định dạng được sử dụng. Tôi khuyên bạn nên đọc qua HTTP protocol nếu bạn có thời gian vì nó giải thích cú pháp và các trường được yêu cầu. Đặc biệt, bạn nên xem phần 5 "Yêu cầu".

Liên quan đến mã của bạn, bạn cần chỉ định phiên bản HTTP sau URI POST và tôi tin rằng bạn cũng cần chỉ định tiêu đề "Máy chủ". Trên hết, bạn cần phải chắc chắn có một dòng-line-return line-feed (CRLF) ở cuối mỗi dòng. Vì vậy, gói của bạn phải trông giống như sau:

POST /Api/AddParking/3 HTTP/1.1 
Host: www.yourhost.com 
27

Câu hỏi ban đầu đã được trả lời, nhưng chỉ để tham khảo cho những người đi qua qua Google; đây là ví dụ hoàn chỉnh hơn về cách đăng dữ liệu lên máy chủ web bằng Arduino:

IPAddress server(10,0,0,138); 
String PostData = "someDataToPost"; 

if (client.connect(server, 80)) { 
    client.println("POST /Api/AddParking/3 HTTP/1.1"); 
    client.println("Host: 10.0.0.138"); 
    client.println("User-Agent: Arduino/1.0"); 
    client.println("Connection: close"); 
    client.print("Content-Length: "); 
    client.println(PostData.length()); 
    client.println(); 
    client.println(PostData); 
} 
+2

client.println (PostData.length()); * thiếu 't' * – F481

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