首页 文章

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

提问于
浏览
1

我正在尝试通过POST从远程服务器使用winhttp.winhttprequest.5.1将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对象(
    [parameters:protected] => Array())
    [query] => Symfony \ Component \ HttpFoundation \ ParameterBag Object(
    [参数:protected] =>数组

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

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

谢谢 .

1 回答

  • 2

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

    http.firewall=none
    

    无论如何,谢谢你的帮助 .

相关问题