我使用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:)
答案 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' ]);
前面提到的博客文章涵盖了这一点。