上一篇:从张磊向耶鲁大学捐款到海事大学研究生杨元元自杀
下一篇:中国记者接连南非被抢,孰真孰假?
免翻墙实现Twitter的OAUTH登陆认证,提供代码下载
米娅 2010年6月10日 17:31:37

楼主按:如果转贴请提供原作者名和原文网址: 免翻墙实现OAUTH登陆认证,提供代码下载 http://coolder.com/547-1-1 

       Twitter7月1日起就停止Basic HTTP认证,采用OAuth认证,意味着用户要访问一次Twitter才能登陆,这对国外用户没问题,对国内用户就添了一道门槛,如何免翻墙实现这个认证,本人研究了好多天,放弃了好几次,今天算是完成了,也算为墙人们的翻墙事业做点贡献。

       这个代码是基于“推特中文圈”1.4.1版的,“推特中文圈”的代码到 这里  下载,点 这里 下载免翻墙实现OAUTH登陆认证的代码版本1.3

       里面的类Scrape大部分取自Screen Scraping Twitter ,只是稍微改动了一下,添了个http的函数。

       再简介一下使用方法,在登录页面添加一个链接按钮,指向oauth_proxy.php,在“推特中文圈”上,可以在login.php添加这么一行

< p style="margin-left:300px;">< a href="oauth_proxy.php" class="link_btn">OAuth代理登陆

       然后把下载的文件解压,放在“中文圈”的根目录下。

       现在有个小问题,就是如果密码或用户名错误,需要重新从login开始,如果需要,点击“退出”清理cookies。关掉浏览器,再重新启动浏览器,再登陆首页即可。  

       点 这里 ,可以访问具体应用。          
原理
2楼 2010年6月10日 18:03:35 米娅

简单说就是用curl,把twitter的网页下载到服务器上,然后变化点内容再发到用户屏幕上。

变化的地方有两个:

原来要打开https://twitter.com/oauth/authenticate?oauth_token= 让输入用户名和密码的页面,现在把这个页面通过curl下载到服务器,改动一下form提交的文件名,然后通过服务器呈现给用户。原来form表单要提交给https://twitter.com/oauth/authenticate,这里改为本地的文件authenticate.php。

本地的authenticate.php接收到数据后,通过curl的post功能把数据传给https://twitter.com/oauth/authenticate,再通过curl把twitter的反馈传到服务器上,通过服务器反馈到用户的浏览器上。这样不用登录twitter就能完成OAuth认证。

补充(20100622):多亏dcshi 的提醒,发现个bug,做了修改,第一次登陆的用户需转到authenticate_2.php,再次登陆就不用了。


3楼 2010年6月10日 18:14:18 米娅

还要谢谢linkedin.com的几位同行,多亏他们点拨,才最后拨云见日。他们给我指出,在提交表单时的session[username_or_email]要用 $_POST['session']['username_or_email'] 来接收,是个数组Array,还给我提供了参考资料链接。

也要谢谢“推特中文圈”和山寨YouTube的作者,从他们的代码里学到很多。

Thanks them all so much。


4楼 2010年6月11日 19:29:45 米娅

可能有人会遇到同样的问题,所以贴过来:

Q: 试了,打开oauth_proxy.php后直接回到login.php
A: 需要点击“退出”,把cookies清空,然后关闭浏览器,再重新打开浏览器登陆,原来的那个OAuth登陆也存在这样的问题。

20100622补充:这个问题已解决。


5楼 2010年6月12日 23:38:35 @helicn
不行啊,删除COOKIE也登陆不了……

6楼 2010年6月13日 00:26:43 米娅

回楼上,删除cookies后,还需要关闭浏览器,然后重新打开,如果还不行,建议到浏览器的“工具”菜单的“Internet options(选项)”,把历史纪录全部删除,关闭浏览器,再重启动浏览器。

另外,你可以到 这里 试试,页面最下面的那个“代理登陆”,我试了几次都可以的。行不行都来说一下,Good luck。

20100622补充:楼上的问题1.3版应该已经解决的。


7楼 2010年6月20日 09:21:33 dcshi
抛一个问题:
如果一个帐号是第一次登录第三方的,会提示:Allow xxx access? deny or allow
这里要有个form的提交是到https://twitter.com/oauth/authorize,
你的这个代理没有解决这个问题!
所以目前对不能翻墙的用户来说,重定向到这个url就是无法访问
我的twitter:@dcshi

8楼 2010年6月20日 10:26:08 米娅

谢谢楼上提醒,不过,我登陆时没有出现“allow/deny”,而是显示下面的界面,输入用户/密码就可以了。

  

9楼 2010年6月21日 10:56:04 米娅
我刚找我国内的朋友测试了一下,是可以的,没有问题。  

10楼 2010年6月22日 11:10:31 米娅

dcshi    @miajiao 是因为你之前已经验证了,你注册个新的帐号试下吧!记住要在需要翻墙的环境下 不要把你的vps或者ssh软件开着!这也是来自我朋友的体验!如果你在加拿大 可能没有这么恶劣的测试环境了哈!我写了个blog文:http://www.dcshi.com/?p=119  

按:把dcshi的推儿转贴到这里,说的很详细,博文里把原理介绍的也很详细,再次感谢。另外,我根据她的博文把代码作了改动,放在1楼,取名1.2版。

补充:还是有问题,这个博文里的代码没有把user/password的值传给twitter,源码不知道怎么写的,因为我不知道那里的代码应该怎么下载,点右键“另存”存的是htm格式的乱码,很可能是我水平问题。

补充:又改动了一下,并测试了一下,通过 -- 因为偷懒的,1.2版没测,放在1楼,取名1.3版。

请教
11楼 2010年7月8日 22:17:39 虫子fred
如果我想自己申请一个免费php空间,用twitese1.4.1解压缩,用你的1.3放进去,然后按照你的方法编辑index.php,这样就可以直接上传使用了吗?还需要另外编辑lib/下面的oauth还有代理什么的吗? 如果您解释起来麻烦,可以帮忙打包一个让我傻瓜修改的吗。@@还有可否推荐一个支持这个的免费空间? 致谢 感激 并请提供您的twitter ID 我想follow
第1页 第2页 第3页 第4页 共4页
相关链接
1. 学习OAuth笔记
2. 在Twitter应用中使用OAuth(入门级)