2015-10-07 29 views
0

我正在使用curl調用API方法(Symfony2,FOSRestBundle)並想知道如何獲取POSTFIELDS中發送的數據?PHP - 如何使用CURL發送POSTFIELDS?

$_params = []; 
    $data_string = json_encode($_params); 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $_method); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); 
    curl_setopt($curl, CURLOPT_VERBOSE, true); 

    $json = curl_exec($curl); 

如果我在例如CURLOPT_HTTPHEADER送東西,我可以在以後使用控制器

$request->headers->get("some_variable"); 

得到它,但我怎麼能訪問$ data_string?我已經甩了幾乎每一個可能的變量,仍然沒有:)

THX :)

回答

0

要檢索symphony一個POST值可以使用:

$request->request->get('key', 'default value'); 

假設$_params是一個有效的json對象,您需要url-ify的數據爲POST,即:

$post_fields = http_build_query(json_decode($_params)); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_fields); </s> 

要檢索all後值symphony你可以使用:

$params = $this->getRequest()->request->all(); 
$params['val1']; 
$params['val2']; 
+0

這是正確的,但我需要讓所有POST變量與CURL一起發送。 我的意思是我需要retrevie變量$ data_string的值。 – Durian

+0

@Durian我已經更新了我的答案。 –

+0

我已經更新了一點我的問題。我的問題是,我需要訪問控制器中的$ data_string變量,當$ _params是一個數組(有時是空的,有時包含一些鍵和值) – Durian

0

據我瞭解你的第一個代碼段,你有效嘗試後JSON字符串?這是我的理解是你的PHP代碼將不會按照該PHP documentationCURLOPT_POSTFIELDS工作:

此參數可以爲像urlencoded的字符串傳遞「PARA1 = VAL1 & PARA2 = VAL2 & ......」或作爲字段名稱作爲鍵和字段數據作爲值的數組。

但是按照this blog post顯然你可以按你的方式做。

無論如何,回到你的問題。爲了得到要求的全部內容,你會怎麼做:

$content = $request->getContent(); 

並且接着解碼你會做的JSON:

$params = json_decode($content); 

Another StackOverflow answer涵蓋這一點。關於我唯一要說的是,您在發送帖子時需要正確設置MIME類型,例如,

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); 

前面提到的博客文章涵蓋了這一點。

+0

你用這段代碼保存我的一天:)謝謝:) $ content = $ request-> getContent(); – Durian