pic*_*rdo 0 php flash post actionscript-3 http-headers
我觉得这个问题很愚蠢,但我已经和它摔跤了好几个小时,我不知道还有什么地方可以转.
我有一个flash表单,它正在向php脚本发出POST请求,然后显示所述脚本的输出.为简单起见,我们假设这是php脚本:
echo 'Mail sent to: ' . $_POST['recipientEmail'];
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,我在POST请求行中的Firebug的网络选项卡中看到了这一点:
Referer: http://example.com/my.swf
Content-type: text/html
Content-length: 68
recipientEmail=example@example.com
Run Code Online (Sandbox Code Playgroud)
表面上一切都很好.帖子已经发布,它将正确的变量发送到脚本.但是当响应回来时,这就是我在Flash跟踪器中看到的:
Mail sent to:
Run Code Online (Sandbox Code Playgroud)
换句话说,$ _POST ['recipientEmail']在请求退出浏览器后丢失了.
你觉得这里发生了什么?脚本和swf文件都在同一个域中,服务器相同.
编辑:我刚尝试从HTML表单中访问相同的脚本,它捕获$ _POST标头.所以它只是在它被Flash发送时才捕获它.Firebug中的post标签看起来与flash有点不同:
recipientEmail example@example.com
submit Submit
Run Code Online (Sandbox Code Playgroud)
请注意,每个变量都在自己的行中.
编辑:这是提交提交的相关AS3代码:
var _gateway:String = Share.getGateway();
var request:URLRequest;
var variables:URLVariables = new URLVariables();
var loader:URLLoader = new URLLoader();
request = new URLRequest(_gateway);
request.contentType = 'text/html';
request.method = URLRequestMethod.POST;
variables.senderName = senderName.text;
variables.recipientEmail = recipientEmail.text;
variables.senderMessage = senderMessage.text;
request.data = variables;
try {
loader.load(request);
}catch (error:Error) {
Debug.trace("Unable to load requested document.");
}
Run Code Online (Sandbox Code Playgroud)
仔细检查HTTP表单请求的标头是否符合Flash小程序的请求.乍一看,我的第一个猜测是" text/html"内容类型,这对于发送的数据不正确 - 它应该是" application/x-www-form-urlencoded".请注意,我从来没有测试过PHP是否真的关心那个特定的细节,但它肯定是可疑的.