2012-12-08 35 views
0

请不要在阅读我的实际问题之前关闭此问题。我看到很多相关的问题,但我仍然有。 只需要在PHP中使用CURL通过POST发送json_encoded数组。当我设置content-type as application/json时,数据不会发布。我收到空的post阵列。当我删除内容类型的行数据发布,但不是json。 这里是我的代码Json加帖子加上curl在PHP中

$data = array('id' => $post['id'], 'action' => $post['action']); 
$post_data = http_build_query($data); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data)); 

我这种情况下,我收到空的帖子。如果我注释掉这一行curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));,我将收到发布数据,但未收到json编码。我想要json_encoded数组。有人会告诉我我做错了什么?

问候:

+0

你确定目标资源可以让你请求的响应格式? – Madbreaks

+0

我正在向其他控制器发送请求。我如何才能知道目标资源是否允许? –

回答

1

你编码查询字符串JSON不是一个数组中删除$post_data = http_build_query($data);并通过$data到json_encode。

$data = array('id' => $post['id'], 'action' => $post['action']); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); 

ofcourse for this service work nedds to support json posts。

+0

当我删除'http_build_query($ data)'时,即使不发送请求。空邮件 –

+0

什么意思是'服务nedds支持json posts.'?我怎么才能知道支持与否? –

+0

@AwaisQarni使用'json_decode(file_get_contents(“php:// input”),true)'获取发布的数据。 – Musa

1

尝试发送正接受RAW POST请求,通过

<?php $postdata = file_get_contents("php://input"); ?> 

RAW POST

+0

那是行得通的。 +1 –