:::: 菜单 ::::

AIR的Http basic验证

flex3或者FLASHcs3开发AIR中如何与需要Http basic验证的web通信?比如饭否http://fanfou.com/home
用户名中有@符号,如果直接访问http://“+loginName+”:”+loginPass+”@api.fanfou.com/statuses/update.xml的话会ioErr的.曾经在蓝色理想提问过,等到现在都没回复,网络上也搜索过,大多都是讲如何配置服务器端验证,而不是讲客户端如何登陆……有人提问C#和JAVA的登陆方法, 但是都没有回复,唯一可用的信息是VBs和Js里的方法,ajax实现起来很容易,xml的open方法的参数里就有user和pwd信息。

去年在flex代码里一条一条扫描,发现urlRequest里有个setLoginCredentials方法,加上urlR.setLoginCredentials(loginName,loginPass);这行就可以发送用户验证信息了

现在新版的AIR发布后,这个方法又废弃了.由于我一直没时间去修改我去年的饭否AIR客户端,所以也没关心这事.今天去官网查了个究竟.取而代之的方法:

无庸置疑,请求还是用URLRequest,不过在AIR中,可以使用flash.net包中的public class URLRequestDefaults.这个玩意有 setLoginCredentialsForHost(hostname:String, user:String, password:String):* 这个静态方法,用来设置针对所选主机的默认用户和密码认证信息.

设置默认urlrequest

URLRequestDefaults 类可让您定义的默认设置URLRequest 对象。举例来说,下面的代码为manageCookies 和useCache 属性设置默认值:

URLRequestDefaults.manageCookies = false;
URLRequestDefaults.useCache = false;

该URLRequestDefaults 类包括一个setLoginCredentialsForHost()方法,可让您为特定的主机指定一个默认的用户名和密码使用。定义在函数参数中的这个主机,可以是一个域名,如“ www.example.com ” ,或一个域名加端口号,如“ www.example.com:80 ” 。请注意, “ example.com ” , “ www.example.com ” , “ sales.example.com ”是各自独立的主机。

此认证信息仅在该服务器需要他们时用到。如果用户已经验证(如通过使用身份验证对话框) ,那你就不能通过调用setLoginCredentialsForHost()方法改变已验证过的用户身份。

举例来说,下面的代码设置默认的用户名和密码后在www.example.com上使用:

URLRequestDefaults.setLoginCredentialsForHost(“www.example.com”, “Ada”, “love1816$X”);

每个URLRequestDefaults设置的属性只应用于设置该属性的应用程序域.不过,setLoginCredentialsForHost() 方法适用于一个AIR应用中的所有应用程序域. 这样,一个带有设置过认证信息的应用程序,能登陆到一台主机,并拥有登入的应用程序中的所有内容.

(可能翻译有误,敬请指出.)

更多参见:http://livedocs.adobe.com/air/1/devappsflash/

延伸阅读


  1. 这个怎么用?能发一段你写的读取饭否内容的代码吗?
    我研究了一下没懂……

  2. 多谢,多谢,我先研究研究,有不懂的再问你
    AS2我还行,到3之后我全乱:)

  3. 求指点。。。。使用Ajax开发AIR的时候也有URLRequestDefaults.setLoginCredentialsForHost,我写成URLRequestDefaults.setLoginCredentialsForHost(“localhost”, “admin”, “55555”);PHP没获取到HTTP认证的信息

  4. @傅小黑, 请检查:
    1.不使用AIR,直接测试浏览器访问,测试是否服务器端的代码正确;
    2.发出请求的URLRequest实例的authenticate属性是否为true(默认为true,可能性比较小);