您的位置:首页 > 其它

服务端强行要求弹出客户端登录窗口自动登录方法

2012-06-21 16:58 218 查看
想做点东西练练javascript,于是打算为饭否AIR客户端爱饭加上额外的功能,例如上传图片等,先尝试了使用javascript验证和发送饭否消息,仅这个就花了不少时间,很多时间花在了去除低级错误上,例如jquery ajax的type:”post”被我写成了method:”post”,花了很多时间才找出来。

先放上主要代码,使用jquery框架以及jquer.base64插件:

有两个主要问题:
var name = "yourname";
var pass = "yourpassword";
$.ajax({
url: "http://api.fanfou.com/statuses/update.xml",
type:"POST",
data: "status=信息内容",
beforeSend: function(xhr){
xhr.setRequestHeader('Authorization', 'Basic ' + $.base64.encode(name + ':' + pass));
},
success: function(data, textStatus){
alert(data);
}
});

1.验证用户
饭否API验证方式为
HTTP Basic 验证,需要对“用户名:密码”进行base64编码,添加进ajax请求的http头信息。

XMLHttpRequest.setRequestHeader(‘Authorization’, ‘Basic ‘ + $.base64.encode(name + ‘:’ + pass));

使用饭否需要验证的API(例如读取私信、发送消息)时,都要在请求前加上这一条HTTP头信息。

爱饭使用YUI框架,可以通过YAHOO.util.Connect.initHeader设置每次ajax请求的默认HTTP头信息,

initHeader(‘Authorization’, ‘Basic ‘ + Base64.encode(name + ‘:’ + pass), true);

最后一个参数”true”代表设为默认http头信息。

设置之后每次使用YAHOO.util.Connect.asyncRequest进行ajax请求都不需要再添加验证。

2.跨域问题

使用ajax请求资源总有跨域问题,即请求只能发生在相同的域内。

以上那段代码请求的域为api.fanfou.com,如果放在网上,除非放在饭否服务器,有相同的域,否则无法运行。

对本地网页,在跨域上,不同浏览器有不同规则,IE允许跨域访问,firefox与chorme都不行。以上代码放在本地,用IE打开,就可以运行,用firefox打开,会出现Access to restricted URI denied” code: “1012。

使用IE可以通过设置可信任站点实现跨域获取内容,其他跨域方法网上很多,还未细究,但都是要在客户端设定或者两站互相配合。

所以,使用javascript发送饭否消息只适合运用在AIR程序上,AIR有自己特定的安全沙箱,允许跨域请求。

另,饭否与Twitter的API几乎一样,可直接套用。

P.S 早上起来,发现已经有人对爱饭扩展,做了查看上传的图片的功能,他还在做上传图片的功能,我也没必要再做这部分功能了。开源的好处之一,就是有很多人帮忙完善这个程序啊~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐