注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

神魔破杜梓的叨叨堂

Programming every day!

 
 
 

日志

 
 
 
 

解析给定的URL  

2008-08-07 17:25:33|  分类: My Tech |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原文来自ntt.cc
Problem Summary: Once I need to get the host, protocol, port, parameters from a given URL with Action-Script. I googled for a class named HTTPUtil developed by members of flexpasta.com, and got some tips about URLUtil of Flex SDK. However, HTTPUtil is used to resolve information from the URL of the page the SWF file embed in. URLUtil is useful, but a little complex. I need a simple method to resolve a given URL, and use the resolved information directly without extra processing.

Solution Summary: I decide to write a class named URLParser myself to satisfy my requirement using regular expression of action-script.

Search-256x256 Demo | DownloadDownload Full Project

URLParser

Download: URLParser.as
  1. package
  2. {
  3.     import mx.managers.ISystemManager;
  4.    
  5.     [Bindable]
  6.     public class URLParser
  7.     {
  8.         public static var url:String;
  9.        
  10.         public static var host:String = "";
  11.         public static var port:String = "";
  12.         public static var protocol:String = "";
  13.         public static var path:String = "";
  14.         public static var parameters:Object;   
  15.        
  16.          public static function parse( url:String ) : void    
  17.         {
  18.             URLParser.url = url;
  19.             var reg:RegExp = /(?P<protocol>[a-zA-Z]+) : \/\/  (?P<host>[^:\/]*) (:(?P<port>\d+))?  ((?P<path>[^?]*))? ((?P<parameters>.*))? /x;
  20.             var results:Array = reg.exec(url);
  21.            
  22.             protocol = results.protocol
  23.             host = results.host;
  24.             port = results.port;
  25.             path = results.path;
  26.             var paramsStr:String = results.parameters;
  27.             if(paramsStr!="")
  28.             {
  29.                 parameters = null;
  30.                 parameters = new Object();
  31.                
  32.                 if(paramsStr.charAt(0) == "?")
  33.                 {
  34.                     paramsStr = paramsStr.substring(1);
  35.                 }
  36.                 var params:Array = paramsStr.split("&");
  37.                 for each(var paramStr:String in params)
  38.                 {
  39.                     var param:Array = paramStr.split("=");
  40.                     parameters[param[0]] = param[1];
  41.                 }                               
  42.             }   
  43.         }
  44.     }
  45. }

Description: I use regular expression to resolve what I want from the given URL. The explanation of the expression is below:

As the url is “http://localhost:8080/URLParserDemo.swf?debug=true”

  1. (?P<protocol>[a-zA-Z]+) match the protocol
  2.  
  3. http
  4.  
  5. : \/\/ match “://”
  6.  
  7. ://
  8.  
  9. (?P<host>[^:\/]*) match the host domain
  10.  
  11. localhost
  12.  
  13. (:(?P<port>\d+))? match the port, if any
  14.  
  15. :8080
  16.  
  17. ((?P<path>[^?]*))? match the requested resource path of the host, if any
  18.  
  19. URLParserDemo.swf
  20.  
  21. ((?P<parameters>.*))? match the request parameters, if any
  22.  
  23. ?debug=true

Following is the source of URLParserDemo.mxml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- http://ntt.cc -->
  3. <mx:Application 
  4.     xmlns:mx="http://www.adobe.com/2006/mxml" 
  5.     layout="absolute"
  6.     creationComplete="initApp()" 
  7.     >
  8.     <mx:Script>
  9.         <![CDATA[
  10.             import mx.controls.Alert;
  11.             import mx.utils.ObjectUtil;
  12.            
  13.             [Bindable]
  14.             private var params:Array;
  15.            
  16.             private function initApp():void
  17.             {
  18.                 URLParser.parse(systemManager.loaderInfo.url);
  19.                 var classInfo:Object = ObjectUtil.getClassInfo(URLParser.parameters);
  20.                 if(classInfo.properties!=null && classInfo.properties.length>0)
  21.                     params = classInfo.properties;
  22.             }
  23.            
  24.         ]]>
  25.     </mx:Script>
  26.     <mx:Panel width="100%" height="100%" title="HttpUtil Demo窶披?粘how the host info of the loaded swf">
  27.         <mx:Form width="100%" height="100%">
  28.             <mx:FormItem label="url">
  29.                 <mx:Label text="{ URLParser.url}"/>
  30.             </mx:FormItem>
  31.             <mx:FormItem label="host">
  32.                 <mx:Label text="{ URLParser.host}"/>
  33.             </mx:FormItem>
  34.             <mx:FormItem label="path">
  35.                 <mx:Label text="{ URLParser.path}"/>
  36.             </mx:FormItem>
  37.             <mx:FormItem label="port">
  38.                 <mx:Label text="{ URLParser.port}"/>
  39.             </mx:FormItem>
  40.             <mx:FormItem label="protocol">
  41.                 <mx:Label text="{ URLParser.protocol}"/>
  42.             </mx:FormItem>
  43.             <mx:FormItem label="parameters" direction="horizontal">
  44.                  <mx:Repeater dataProvider="{params}" id="paramList">
  45.                      <mx:Label text="{paramList.currentItem.localName}"/>
  46.                      <mx:Label text="{URLParser.parameters[paramList.currentItem.localName]}"/>
  47.                  </mx:Repeater>
  48.             </mx:FormItem>
  49.         </mx:Form>
  50.     </mx:Panel>   
  51. </mx:Application>

  评论这张
 
阅读(349)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017