google代理上网软件GAppProxy如何登陆twitter
此前曾在企博网博客整理并发了一篇关于如何利用基于Google app engine平台的GAppProxy 代理上网软件的文章,GAppProxy是使用python语言写的一个Google Code开源项目,安装GAppProxy软件实现代理上网的方法可以参考这篇文章:使用Google app engine安装GAppProxy上网代理软件方法。后来在公司电脑上安装了GAppProxy,发现代理上网速度很不错,而且很稳定。以前找代理服务器IP代理上网,找半天都找不到几个好用的,更不用说找干净没有广告又稳定的代理ip了。
使用Google GAppProxy代理上网软件访问facebook,twitter,blogspot还算流畅,浏览网页速度很快,看看一些GFW之外的网页也没问题,不过我们都有自己的判断力,对那些明显带有政治色彩的东西不感兴趣。但最遗憾的是使用GAppProxy代理上网虽然能正常访问twitter,但只限于浏览,登陆不了twitter和YouTube,不能注册、更不用说在twitter上follow和发表微博客。
原以为这只是由于twitter网站登陆要求的安全性和GAE平台的局限性造成的(09年开发的windows客户端开始支持https,但是仍不支持https认证证书,https 安全仍是个问题),因为我用GAppProxy代理上网登陆新浪没问题,登陆企博网有问题,登陆twitter也有问题,所以一段时间都没有再用。
后来看到网上说,由于GAppProxy存在两个bug导致了一些网站的登陆问题:其中一个是刚才提到的https证书问题;另外一个是由于GAppProxy对cookies处理不当,因为它对header 中的多个Set-Cookie 域处理错误,导致用户登录twitter等网站错误,无法获得正确的会话Cookie。
这也就是说抛开Web登陆安全问题不考虑,解决了GAppProxy的cookie 会话这个bug之后,就能注册和登陆twitter,facebook, YouTube, blogspot了。所以我又想在自己电脑上重新安装GAppProxy客户端,试试代理上网了。
下面简单列一下GAppProxy安装和设置步骤:
1. 注册 Google App Engine,用你的Google帐户登陆Google App Engine,创建应用“Create an Application”,一个账户最多可以创建10个应用。注意此过程需要输入手机号码验证,长时间没收到验证码可以重发,我重发了一次才收到一个落款为杭州承太贸易的验证码短信息。记住创建过程中你填写的Application Identifier,也就是name.appspot.com 中的name,后面会用到。
2. 下载并安装 Python 和 Google App Engine SKD :
Python下载地址(可选择版本):http://www.python.org/ftp/
直接下载地址:Python 和 Google App Engine SDK
3. 下载 GappProxy 和fetchServer :
直接下载地址: GappProxy | fetchServer
4. 解压缩 fetchServer
将该解压缩文件夹放在Google App Engine SKD 安装目录下google_appengine文件夹中。
5. 编辑app.yaml 文件
用文本编辑器打开fetchServer 文件夹内的app.yaml 文件,将第一行 your_application_name 修改为第1步填写的Application Identifier。
6. 上传fetchserver 文件
- 打开命令提示符(点击 开始–运行–输入cmd)
- 进入Google App Engine SKD 的安装目录(命令:输入
X:进入X盘; - 再输入
cd X:\Program Files\Google\google_appengine\) - 输入以下命令行:
appcfg.py update fetchserver,回车 - 输入Google 账户email地址及密码,显示Closing update: new version is ready to start serving。
- 关闭命令提示符结束上传。
7. 测试 fetchserver:
打开浏览器,进入 http://name.appspot.com/fetch.py 。name改为你的Application Identifier,如页面提示“GAppProxy已经在工作了”,安装成功!
8. 使用GappProxy代理上网软件及设置:
解压缩 GappProxy 至任意文件夹,打开gui.exe,勾选Use FetchServer 并输入你的http://name.appspot.com/fetch.py,点save,点击Status 测试代理运行正常。点击service设置gappproxy为系统自启动项。
9. 浏览器代理服务器设置:
浏览器代理服务器地址和端口设置为127.0.0.1:8000。在Firefox中(菜单-工具-选项-高级-网络-连接-设置-手动配置代理-HTTP代理和端口分别填写127.0.0.1和8000-勾选为所有协议使用相同代理-确定),输入网址www.twitter.com测试是否能正常打开和浏览了,OK。
要查看更详细的介绍请看我在开头介绍的企博网博客上的发的文章。下面看看如何解决twitter无法登陆的问题。
设置GAppProxy代理上网软件,解决Cookie会话问题:
(这个解决办法摘自:http://code.google.com/p/gappproxy/issues/detail?id=13 )
1. Bug原因:GAPPProxy会将header 中的多个Set-Cookie 域当作一个串传送给本地浏览器,导致了用户登录twitter等网站错误,无法获得正确的Cookie。
2. 解决办法():起初认为在proxy.py中用split(‘, ‘)将多个Set-Cookie 域切开,同样设置多个Set-Cookie 域就可以解决问题,但是由于split(‘, ‘)的,符号也是cookie的一个合法字符,所以最后的更新代码只需要更新服务器端的fetch.py就可以了,如下:
Index: fetch.py
===================================================================
— fetch.py (revision 92)
+++ fetch.py (working copy)
@@ -29,6 +29,7 @@
from google.appengine.ext import webapp
from google.appengine.api import urlfetch
from google.appengine.api import urlfetch_errors
+import re
# from accesslog import logAccess
@@ -153,14 +154,12 @@
if header.strip().lower() in self.HtohHdrs:
# don’t forward
continue
- ## there may have some problems on multi-cookie process in urlfetch.
- #if header.lower() == ‘set-cookie’:
- # logging.info(‘O %s: %s’ % (header, resp.headers[header]))
- # scs = resp.headers[header].split(‘,’)
- # for sc in scs:
- # logging.info(‘N %s: %s’ % (header, sc.strip()))
- # self.response.out.write(‘%s: %s\r\n’ % (header, sc.strip()))
- # continue
+ # there may have some problems on multi-cookie process in urlfetch.
+ if header.lower() == ‘set-cookie’:
+ scs = re.sub(r’, ([^,;]+=)’, r’\n\1′, resp.headers[header]).split(‘\n’)
+ for sc in scs:
+ self.response.out.write(‘%s: %s\r\n’ % (header, sc.strip()))
+ continue
# other
self.response.out.write(‘%s: %s\r\n’ % (header, resp.headers[header]))
# check Content-Type
也可以直接下载这个修改过的fetch.py文件:fetch.py 。将fetchServer目录下原来的文件替换掉。
最后重复上面的第6步,重新上传fetchserver 文件夹。显示deploying new version就完成了。