2012-08-16 37 views
6

Tôi đang sử dụng curl để gửi thông điệp này:POST trống khi cong JSON

curl -i -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "{firstname:james}" http://hostname/index.php 

Tôi đang cố gắng để hiển thị POST như thế này trong index.php

<?php 
die(var_dump($_POST)); 
?> 

Những kết quả đầu ra

array(0) { 
} 

Tôi phải hiểu nhầm điều gì đó về việc gửi dữ liệu JSON qua POST

Cảm ơn bạn đã dành thời gian

+0

Câu hỏi đã chỉnh sửa cho bạn – PandemoniumSyndicate

+0

Tôi đồng ý: bạn không đặt dữ liệu bài đăng JSON/HTTP chính xác. Nhìn vào liên kết này: http://stackoverflow.com/questions/8045260/post-json-data-to-simple-rails-application-with-curl – paulsm4

+1

Tôi nghĩ bạn cần trích dẫn các biến vì chúng là các chuỗi không phải là số – Waygood

Trả lời

21

$_POST là một mảng chỉ được điền nếu bạn gửi nội dung POST ở định dạng được mã hóa URL. PHP không tự động phân tích cú pháp JSON và do đó không điền vào mảng $_POST. Bạn cần phải nhận được cơ thể POST liệu và giải mã các JSON mình:

$json = file_get_contents('php://input'); 
$values = json_decode($json, true); 
+0

Chết tiệt, đánh tôi với nó :-P –

+2

Bằng 3 giây. O_o – deceze

+0

Hóa ra là '{"firstname": "james"}' – PandemoniumSyndicate

5

$_POST chỉ hoạt động nếu bạn đang gửi dữ liệu mẫu được mã hóa. Bạn đang gửi JSON, vì vậy PHP không thể phân tích cú pháp nó thành mảng $_POST.

Bạn cần đọc trực tiếp từ nội dung POST.

$post = fopen('php://input', r); 
$data = json_decode(stream_get_contents($post)); 
fclose($post); 
Các vấn đề liên quan