使用PHP中的JSON字符串发送Http post请求

时间:2014-04-03 05:23:25

标签: php json http

这是我的代码,

$url= 'http://dummyhost:8080/admin/EditSubscriber?jsonString={"sub_Id":3,"sub_Fname":"messi","sub_Lname":"lionel"}';
$data_string="";
$request = new HTTPRequest($url, HTTP_METH_POST);
$request->setRawPostData($data_string);
$request->send();    
$response = $request->getResponseBody();
$response= json_decode($response, true);

在url JSON字符串的末尾根据服务器要求连接 但作为回应,我没有得到任何响应变量。 这有什么问题,因为当我使用chrome扩展程序发出此请求时,它会显示更新的结果。当我使用$url= "http://dummyhost:8080/admin/ViewSubsriber?jsonString={"sub_Name":"messi","sub_Password":"password"}";时 我得到了理想的结果。 我也使用curl'

我也像这样使用过Curl

$ch = curl_init($url);                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
'Content-Type: application/json',                                                                                
'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   
$result = curl_exec($ch);                            
curl_close($ch);
$json_result = json_decode($result, true);

但同样的结果我得到的是什么

2 个答案:

答案 0 :(得分:1)

如果你自己创建了JSON字符串,请记住以下事项:
字符串中的空格可能会导致服务器出现不自然的行为,因此对于每个变量或至少使用字符串

urlecode(yourvariable);

然后在线chek字符串,JSON字符串有效或不是这样 http://json.parser.online.fr/

像布兰特说的那样使用

$json = file_get_contents('php:://input');

表示原始数据,而不是使用空$data_string="";

答案 1 :(得分:0)

您发布的变量$ data_string为空。您正在使用POST并发送空数据,但随后还发送查询字符串。看来你在这里混合了GET和POST方法。您需要在发布的数据中实际发布JSON字符串。

如果您使用应用程序/ JSON内容类型发布原始JSON字符串,则需要从原始输入中读取帖子数据

$json = file_get_contents('php:://input');

这是因为$ _POST只能由PHP自动填充表单编码的内容类型。

我还建议坚持使用curl进行此类用法。