2015-10-07 30 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