如何用本地GAE SDK运行的Python代码在浏览器中显示页面?
当我在我的电脑上运行这段代码,并使用“Google App Engine SDK”时,我的浏览器显示的是谷歌主页的HTML代码:
from google.appengine.api import urlfetch
url = "http://www.google.com/"
result = urlfetch.fetch(url)
print result.content
我该怎么做才能让它显示出网页本身呢?我想在浏览器里看到的页面,应该和任何互联网用户看到的一样。
更新 1:
我发现我收到了几个看起来有点复杂的问题,虽然我记得我之前能做到这一点,而且非常简单,只是我不记得当时具体改了什么代码。
也许,我没有给你们提供足够的细节,关于我怎么运行这段代码和我在哪里找到它。让我告诉你们我做了什么。我只是在我的电脑上安装了Python 2.5,然后下载并安装了“Google App Engine SDK”。按照“GAE”页面上的说明(http://code.google.com/appengine/docs/python/gettingstarted/helloworld.html),我创建了一个目录,命名为“My_test”,然后在里面创建了一个“my_test.py”文件,里面包含了我在问题中提到的那段小代码。
接着,继续按照说明,我在里面创建了一个“app.yaml”文件,里面提到了我的“my_test.py”文件。之后在“Google App Engine Launcher”中,我找到了“My_test”目录,点击了运行按钮,然后点击了浏览。然后,在我的网页浏览器中访问这个网址 http://localhost:8080/,我看到了结果。
我确实记得我能用这种方式在浏览器中显示任何页面,而且非常简单,只是我不记得具体改了什么代码(只是稍微改动了一下)。现在,我看到的只是一个页面的原始HTML代码,而不是页面本身。
更新 2:
(这个更新是我对wescpy的回复)
你好,wescpy!!!我试了你的更新代码,但似乎有些地方不太对。也许是因为我没有使用某个特定的框架,而这个框架是我应该用来运行这段代码的。请看看这个截图(我想你需要右键点击这个图片才能看到更清晰的版本):
(来源: narod.ru)
3 个回答
像 < 和 > 这样的特殊字符可能是经过编码的,你需要把它们解码,这样浏览器才能把它们当作代码来理解。
一个更完整的例子可能看起来像这样:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import urlfetch
class MainHandler(webapp.RequestHandler):
def get(self):
url = "http://www.google.com/"
result = urlfetch.fetch(url)
self.response.out.write(result.content)
application = webapp.WSGIApplication([
('/', MainHandler),
], debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
但是正如其他人所说的,这并不是那么简单,因为你不在服务器的范围内,这意味着页面可能会因为缺少静态内容(比如JavaScript、CSS和/或图片)而显示得不正确……除非使用完整的路径名,或者所有需要的内容都嵌入到页面中。
更新 1:
正如之前提到的,你不能仅仅下载HTML源代码就指望它能正确显示,因为你不一定能访问到静态数据。如果你真的想要像原本那样显示它,你必须进行重定向……这是修改后的代码:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import urlfetch
class MainHandler(webapp.RequestHandler):
def get(self):
url = "http://www.google.com/"
self.redirect(url)
application = webapp.WSGIApplication([
('/', MainHandler),
], debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
更新 2:
抱歉!这是一个复制粘贴的错误。现在试试这个。
这并不是一件简单的事,你需要解析内容,并把图片和JavaScript的相对路径调整为绝对路径。
不过,试试看添加正确的内容类型吧:
from google.appengine.api import urlfetch
url = "http://www.google.com/"
result = urlfetch.fetch(url)
print 'Content-Type: text/html'
print ''
print result.content