我正在尝试通过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] => A1005
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 回答
使用OVH作为 生产环境 服务器,它将HTTP防火墙设置为禁用以将POST数据发送到控制器(根目录上的.ovhconfig) . 正确删除或设置允许我发送这些数据 .
无论如何,谢谢你的帮助 .