我正在尝试使用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控制器,请求为空......
谢谢。
答案 0 :(得分:2)
使用OVH作为生产服务器,它将HTTP防火墙设置为禁用以将POST数据发送到控制器(根目录上的.ovhconfig)。 正确删除或设置允许我发送这些数据。
http.firewall=none
感谢您提供帮助。