PHP - 如何使用CURL发送POSTFIELDS?

时间:2015-10-07 11:07:46

标签: php symfony curl

我使用curl调用API方法(Symfony2,FOSRestBundle),并想知道如何在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:)

2 个答案:

答案 0 :(得分:0)

要在POST中检索symphony值,您可以使用:

$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'];

答案 1 :(得分:0)

据我了解您的第一个代码段,您是否有效地尝试POST一个JSON字符串?据我了解,您的PHP代码不会按照CURLOPT_POSTFIELDS的{​​{3}}工作:

  

此参数可以作为urlencoded字符串传递,例如&#39; para1 = val1&amp; para2 = val2&amp; ...&#39;或者作为一个数组,字段名称为键,字段数据为值。

但按照PHP documentation显然你可以按照自己的方式行事。

无论如何,回到你的问题。要获取请求的完整内容,您可以执行以下操作:

$content = $request->getContent();

然后解码你要做的JSON:

$params = json_decode($content);

this blog post涵盖了这一点。关于我唯一要说的是,您需要在发送帖子时正确设置MIME类型,例如

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

前面提到的博客文章涵盖了这一点。