Symfony2和跨站点POST请求=>空数据

时间:2014-05-08 11:10:25

标签: php symfony post

我正在尝试使用winhttp.winhttprequest.5.1通过POST从远程服务器向控制器发送XML字符串。 在我的开发机器上这样做运行完全正常(在同一台机器上托管客户端和服务器,相同的IP)。 然而,当我的应用程序部署在生产服务器上时,POST数组为空。

我认为这可能是由于CSRF保护,但即使我在config.yml中禁用它,我的控制器仍然会获得空数据。 所以,我在这里非常困难,感谢任何帮助。

使用winhttp.winhttprequest.5.1发送数据

loObj.Open("POST", url, .F.)
loObj.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
loObj.Send("lcFile=" + parsedContent)

Symfony2控制器:

public function getStockFromLogisticsXMLStringAction(Request $request)
{
    $request = $this->get('request');

    $xml = "";
    $output = $this->get('webservice.response');

    if ($request->getMethod() == 'POST') 
        $xml = $request->request->get('lcFile');
...
}

请求转储:

  • 开发机器: [请求] => Symfony \ Component \ HttpFoundation \ ParameterBag对象(
    [参数:protected] =>数组(
    [lcFile] => A1 005 LNBsLNBs5false2013-05-30T12:06:52201 blablabla

  • 生产机器: [请求] => Symfony \ Component \ HttpFoundation \ ParameterBag对象(
    [参数:protected] =>数组())
    [query] => Symfony \ Component \ HttpFoundation \ ParameterBag对象(
    [参数:protected] =>数组

两个环境都使用PHP 5.4运行Apache。

我怀疑一些CSRF保护问题的事实是,如果我将完全相同的XML字符串发送到生产服务器上的纯PHP脚本,将POST数据转储到文件中,它就可以工作。 如果我将这些数据发送到Symfony控制器,请求为空......

谢谢。

1 个答案:

答案 0 :(得分:2)

使用OVH作为生产服务器,它将HTTP防火墙设置为禁用以将POST数据发送到控制器(根目录上的.ovhconfig)。 正确删除或设置允许我发送这些数据。

 http.firewall=none

感谢您提供帮助。