2014-09-21 42 views
0

我有一個接受GET,POST值作爲參數的Web服務。到目前爲止,我用使用一個簡單的捲曲腳本調用數據,如下:我可以使用PHP/CURL同時發佈JSON正文和POST值嗎?

http://localhost/service/API.php?key=some_password&request=some_request&p1=v1&p2=v2 

這是利用成功發佈「CURLOPT_POSTFIELDS」:

$base_args = array(
     'key' => 'some_password', 
     'request' => 'some_request', 
    ); 

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 

的問題是,我也需要張貼JSON正文以此服務。我發現這可以通過使用「CURLOPT_POSTFIELDS」來完成,但也發現我無法同時使用POST和JSON。

$data_string ="{'test':'this is a json payload'}"; 

$ch = curl_init('http://localhost/service/API.php'); 

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); 
echo ($result); // string returned by the service. 

我可以設置POST值,或設置JSON正文,但不能同時設置。有沒有辦法推動兩種不同類型的價值觀?

+0

身在POST請求後數據 – 2014-09-22 02:09:13

回答

0

我找不到同時發送POST和JSON正文的任何​​方法。因此,解決方法是將POST參數添加爲JSON正文的一部分。

$base_args = array(
    'key' => '8f752Dd5sRF4p', 
    'request' => 'RideDetails', 
    'data' => '{\'test\',\'test\'}', 
); 

$ch = curl_init('http://localhost/service/API.php');                  

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($base_args)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
'Content-Type: application/json',                   
'Content-Length: ' . strlen(http_build_query($base_args))) 

);

var_dump(json_decode(file_get_contents('php://input'))); 
2

嘗試通過可變發送JSON文本:

$data = array('data' => "{'test':'this is a json payload'}", 'key' => 'some_password', 'request' => 'some_request'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 

那麼你的API在你做:

var_dump(json_decode($_POST['data'])); 

,您仍然可以使用其他的鍵/請求變量。

+0

謝謝'http_build_query'沒有爲我的$ _ POST值工作:

$result = curl_exec($ch); echo ($result); 

完整的JSON可以通過下面的API返回返回null。解決方法是將有效負載不作爲POST查詢發送,而是作爲json:'curl_setopt($ ch,CURLOPT_POSTFIELDS,json_encode($ base_args));'發送。然後我可以解析這些值:'var_dump(json_decode(file_get_contents('php:// input')));' – Yann 2014-09-22 02:00:59

相關問題