设为首页 收藏本站
查看: 589|回复: 0

[经验分享] ActionScript3与PHP的通信

[复制链接]

尚未签到

发表于 2015-8-25 14:45:59 | 显示全部楼层 |阅读模式
  在Flash应用开发中,经常需要用到和Web服务器端的通信,把当前的应用程序状态存储到服务器上或者从服务器端获取信息等等。对于Flash来说,他已经提供了对Http协议和网络套接字(Socket)的支持。对于Http协议的支持,Flash通过URLRequest、URLLoader、URLVariables等类来完成操作。
  1、Flash中获取外部图片等资源
  在ActionScript3中,获取外部资源主要通过URLRequest和URLLoader两个类完成,可以通过注册URLLoader类的Complete和Progress等事件来监控获取外部资源的状态。



var myLoader:URLLoader=new URLLoader();
var myXmlLocation:URLRequest = new URLRequest("test.xml");
myLoader.load(myXmlLocation);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,xmlLoadComplete);
  如果我们获取的外部资源是二进制形式的,我们需要使用Loader类来代替URLLoader类。
  2、Flash中的信息传输给Web服务器
  在Flash中需要把数据传递给Web服务器,我们只能通过POST或者GET进行,POST动作相对于GET可以传递更多的数据,具体区别在于Http的entity body,对于POST来说,发送的值就在entity body中,对于GET来说,entity body永远为空。对于HTML表单,可以在Form的Method中指明当前传递数据是POST还是GET,但是Flash中,需要在URLRequest对像中指明当前的操作是POST还是GET。在Flash中,当需要给Web服务器传递数据时,需要URLRequest,URLVariables,URLLoader等三个类来完成。



              var values:URLVariables =new URLVariables();
values.key=”Message”;
var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
var request:URLRequest=new URLRequest("http://localhost/shopguide/data.php");
request.data=values;
request.requestHeaders.push(header);
request.method=URLRequestMethod.POST;
var loader:URLLoader=new URLLoader();
try
{
loader.load(request);
}
catch (error:ArgumentError)
{
trace("An ArgumentError has occurred.");
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}
  上面的代码,利用URLVariables构造出要传递数据的键值对,这样在PHP端,就可以通过$_POST[“key”]来获取传递的数据。代码中的URLRequestHeadere是一个Http请求头,即使应用程序具有所请求内容的缓存副本,也应当将请求转发给原始服务器。下面的图是在IE9的开发人员工具下看到的请求信息。
DSC0000.jpg
DSC0001.jpg
DSC0002.jpg
  在PHP服务端,我们只需要echo($_POST['key']);就可以获取到请求的信息,第三幅图的响应正文就是PHP中echo输出的信息。
  3、使用php://input获取没有指定键值对的Flash请求的内容
  在《ACTIONSCRIPT 3.0编程》这本书中,他给出的一个传递XML的到Web服务器的例子并没有使用URLVariables类来构建键值对,示例代码如下:



var secondsUTC:Number = new Date().time;
var dataXML:XML =
<login>
<time>{secondsUTC}</time>
<username>Ernie</username>
<password>guru</password>
</login>;
var request:URLRequest = new URLRequest("http://localhost/shopguide/data.php");
request.contentType = "text/xml";
request.data = dataXML.toXMLString();
request.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
try
{
loader.load(request);
}
catch (error:ArgumentError)
{
trace("An ArgumentError has occurred.");
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}
  这个代码发送的请求与使用URLVariables类的差异在于请求的内容直接是发送的内容,就是没有键值,请求的内容如下:
DSC0003.jpg
  像这样的请求如何在PHP中取得数据?后来查资料得知,可以通过PHP的file_get_contents("php://input")获取。在PHP中,file_get_contents返回的是一个字符串。通过输出file_get_contents的内容我们可以看到如下响应正文。
DSC0004.jpg
  关于php://input,请参考这篇文章:

php://input是什么意思?php输入流input的介绍
  ActionsScript3中还提供了Socket类和XMLSocket类,具体使用可以参考《 ACTIONSCRIPT 3.0编程》这本书。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104128-1-1.html 上篇帖子: php json与xml序列化/反序列化 下篇帖子: 写给系统管理员的25个PHP安全实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表