2014-01-22 76 views
0

我想将json数据发布到远程URL,并且该url将返回json格式数据。这里是我的代码:php发布json到远程服务器并获取json结果

$post_array=Array(
    "trips"=>array(
     "departure_code"=> "SIN", 
     "arrival_code"=> "HKT", 
     "outbound_date"=>"2014-02-29", 
     "inbound_date"=> "2014-03-05" 
     ), 
     "adults_count"=> 1 
    ); 

    $content = json_encode($post_array); 
    $curl = curl_init($search_url); 

    curl_setopt($curl, CURLOPT_HEADER, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $content); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

    $result  = curl_exec($curl); 
    //$response = json_decode($result); 
    var_dump($result); 
    curl_close($curl); 

结果应该是:

{ 
    "id": "pNQFapkhRQ6ZYxql4MQDbQ", 
    "key": "[SIN:HKT:2014-01-29:2014-02-05]~1~0~XX~FI", 
    "trips": [ 
    { 
     "id": "SIN:HKT:2014-01-29:2014-02-05", 
     "departure_code": "SIN", 
     "departure_name": "Singapore", 
     "trip_type": "standard" 
    } 
    ], 
"cabin": "economy", 
"adults_count": 1, 
} 

string(35) "{"message":"Problems parsing JSON"}"错误。感谢帮助。

+0

问题的一个简单的演示是符合你的要求;见http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl –

+0

你真的在你的第一行或数组中使用'Array(...' (小写)?你能显示'var_dump($ content)'的结果吗? –

+0

嗨,我改变数组到数组,但结果是一样的。var_dump($ content)的结果是字符串(129)“{”trips“ :{ “departure_code”: “SIN”, “arrival_code”: “HKT”, “outbound_date”: “2014年2月29日”, “inbound_date”: “2014年3月5日”}, “adults_count”:1}” – user3210341

回答

0

什么是$ search_url? 你有关于这项服务的任何文件吗?

试图改变这一行:

curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); 

到:

curl_setopt(
    $curl, 
    CURLOPT_HTTPHEADER, 
    array(
     "Content-type: application/json", 
     "Content-Length: ".strlen($content) 
    ) 
); 
1

在这里,我向您展示cURL

$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_HEADER, 0); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
              'Content-Type:application/json', 
              'Content-Length:'.strlen($data_string) 

             )); 

$json_response = curl_exec($curl); 
$curl_errorno = curl_errno($curl); 
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);