初遇 Google App Engine, 更新问题的解决
2009-01-21 17:34
573 查看
2010.11.25 更新:
最新版本的 GAE SDK 已经解决了该问题。不需要做任何修改,只需设定环境变量即可。具体到 Windows 环境,在命令行输入如下命令:
C:/>set HTTP_PROXY=http://xxx.xxx.xxx.xxx:<port>
C:/>set HTTPS_PROXY=https://xxx.xxx.xxx.xxx:<port>
=======
Google App Engine 提供了统一的web application应用程序接口及托管。它为用户快速构建一个web应用提供了方便的途径。今天初步尝试了一下,用起来很容易。
在代理后更新 App:
由于我们公司访问网络是使用代理方式,起初,无论怎么设置,appcfg.py均返回错误,或长时间无响应。Google了一下,遇到同样问题的同学还不少。最后找到一片文档,有效解决了该问题。方案如下:
首先,编辑文件 google_appengine/google/appengine/tools/appcfg.py
在这个文件中,找到这两行:
将它们替换为如下内容。注意保持原有对齐方式,并将 xxx.xxx.xxx.xxx:0000替换为你实际使用的代理:
然后,在同一个目录下 google_appengine/google/appengine/tools/, 建立一个文件 ProxyHTTPConnection.py,内容如下:
重新运行appcfg.py。一切OK。
问题:
安全性是最重要的问题。一方面,Google 如何保证托管的 App 的安全。另一方面,托管的 App,如何保证用户数据的安全?
参考:
1. http://code.google.com/intl/zh-CN/appengine/
2. http://fasondev.ycool.com/post.2910659.html
3. http://code.activestate.com/recipes/456195/
最新版本的 GAE SDK 已经解决了该问题。不需要做任何修改,只需设定环境变量即可。具体到 Windows 环境,在命令行输入如下命令:
C:/>set HTTP_PROXY=http://xxx.xxx.xxx.xxx:<port>
C:/>set HTTPS_PROXY=https://xxx.xxx.xxx.xxx:<port>
=======
Google App Engine 提供了统一的web application应用程序接口及托管。它为用户快速构建一个web应用提供了方便的途径。今天初步尝试了一下,用起来很容易。
在代理后更新 App:
由于我们公司访问网络是使用代理方式,起初,无论怎么设置,appcfg.py均返回错误,或长时间无响应。Google了一下,遇到同样问题的同学还不少。最后找到一片文档,有效解决了该问题。方案如下:
首先,编辑文件 google_appengine/google/appengine/tools/appcfg.py
在这个文件中,找到这两行:
response = self.opener.open(req) response_body = response.read()
将它们替换为如下内容。注意保持原有对齐方式,并将 xxx.xxx.xxx.xxx:0000替换为你实际使用的代理:
opener = urllib2.build_opener(ConnectHTTPHandler, ConnectHTTPSHandler) urllib2.install_opener(opener) urlpath = r"https://www.google.com/accounts/ClientLogin?" urlpath = urlpath + "Passwd="+password urlpath = urlpath + "&source=Google-appcfg-1.0&accountType=HOSTED_OR_GOOGLE&Email=" urlpath = urlpath + email urlpath = urlpath + "&service=ah" req = urllib2.Request(url=urlpath) req.set_proxy('xxx.xxx.xxx.xxx:0000', 'https') f = urllib2.urlopen(req) response_body = f.read()
然后,在同一个目录下 google_appengine/google/appengine/tools/, 建立一个文件 ProxyHTTPConnection.py,内容如下:
# urllib2 opener to connection through a proxy using the CONNECT method, (useful for SSL) # tested with python 2.4 import urllib2 import urllib import httplib import socket class ProxyHTTPConnection(httplib.HTTPConnection): _ports = {'http' : 80, 'https' : 443} def request(self, method, url, body=None, headers={}): #request is called before connect, so can interpret url and get #real host/port to be used to make CONNECT request to proxy proto, rest = urllib.splittype(url) if proto is None: raise ValueError, "unknown URL type: %s" % url #get host host, rest = urllib.splithost(rest) #try to get port host, port = urllib.splitport(host) #if port is not defined try to get from proto if port is None: try: port = self._ports[proto] except KeyError: raise ValueError, "unknown protocol for: %s" % url self._real_host = host self._real_port = port self.set_debuglevel(99) httplib.HTTPConnection.request(self, method, url, body, headers) def connect(self): httplib.HTTPConnection.connect(self) #send proxy CONNECT request self.send("CONNECT %s:%d HTTP/1.0/r/n/r/n" % (self._real_host, self._real_port)) #expect a HTTP/1.0 200 Connection established response = self.response_class(self.sock, strict=self.strict, method=self._method) (version, code, message) = response._read_status() #probably here we can handle auth requests... if code != 200: #proxy returned and error, abort connection, and raise exception self.close() raise socket.error, "Proxy connection failed: %d %s" % (code, message.strip()) #eat up header block from proxy.... while True: #should not use directly fp probablu line = response.fp.readline() if line == '/r/n': break class ProxyHTTPSConnection(ProxyHTTPConnection): default_port = 443 def __init__(self, host, port = None, key_file = None, cert_file = None, strict = None): ProxyHTTPConnection.__init__(self, host, port) self.key_file = key_file self.cert_file = cert_file def connect(self): ProxyHTTPConnection.connect(self) #make the sock ssl-aware ssl = socket.ssl(self.sock, self.key_file, self.cert_file) self.sock = httplib.FakeSocket(self.sock, ssl) class ConnectHTTPHandler(urllib2.HTTPHandler): def __init__(self, proxy=None, debuglevel=9): self.proxy = proxy urllib2.HTTPHandler.__init__(self, debuglevel) def do_open(self, http_class, req): if self.proxy is not None: req.set_proxy(self.proxy, 'http') return urllib2.HTTPHandler.do_open(self, ProxyHTTPConnection, req) class ConnectHTTPSHandler(urllib2.HTTPSHandler): def __init__(self, proxy=None, debuglevel=9): self.proxy = proxy urllib2.HTTPSHandler.__init__(self, debuglevel) def do_open(self, http_class, req): if self.proxy is not None: req.set_proxy(self.proxy, 'https') return urllib2.HTTPSHandler.do_open(self, ProxyHTTPSConnection, req) if __name__ == '__main__': import sys proxy = '10.xx.xx.xxx:8080' opener = urllib2.build_opener(ConnectHTTPHandler(proxy=proxy), ConnectHTTPSHandler(proxy=proxy)) urllib2.install_opener(opener) urlpath = r"https://www.gmail.com/" req = urllib2.Request(url=urlpath) f = urllib2.urlopen(req) print f.read()
重新运行appcfg.py。一切OK。
问题:
安全性是最重要的问题。一方面,Google 如何保证托管的 App 的安全。另一方面,托管的 App,如何保证用户数据的安全?
参考:
1. http://code.google.com/intl/zh-CN/appengine/
2. http://fasondev.ycool.com/post.2910659.html
3. http://code.activestate.com/recipes/456195/
相关文章推荐
- 初遇 Google App Engine, 更新问题的解决
- 解决Google App Engine的中文乱码问题
- Google App Engine Launcher无法启动问题解决
- google app engine的缓存服务解决性能问题
- Google App Engine 中通过自定义Django的filter解决时区问题
- 新手搭建android项目无法在线更新ADT的问题解决!链接不上dl-ssl.google.com问题解决!
- 部署到Google App Engine时中途退出后引起的问题
- 解决之前上架的 App 在 iOS 9 会闪退问题 (更新:已有 Hotfix)
- 【Android问题】解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused”的问题
- Android开发系列之动态添加dex(解决app频繁更新问题)
- 无法访问appengine.google.com的解决办法
- Failed to fetch URl https://dl-ssl.google.com/android/repository/addo Android SDK更新以及ADT更新出现问题的解决办法
- Linux下解决Android SDK更新“ Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml ”的问题
- 解决“iOS 7 app自动更新,无法在app中向用户展示更新内容”问题
- 解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused”的问题
- 如何解决Mac App Store无法更新应用的问题
- 【Android问题】解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused”的问题
- 部署struts2项目到 google app engine (age)中遇到的一个问题