如何用本地GAE SDK运行的Python代码在浏览器中显示页面?

1 投票
3 回答
713 浏览
提问于 2025-04-15 22:03

当我在我的电脑上运行这段代码,并使用“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!!!我试了你的更新代码,但似乎有些地方不太对。也许是因为我没有使用某个特定的框架,而这个框架是我应该用来运行这段代码的。请看看这个截图(我想你需要右键点击这个图片才能看到更清晰的版本): alt text
(来源: narod.ru)

3 个回答

0

像 < 和 > 这样的特殊字符可能是经过编码的,你需要把它们解码,这样浏览器才能把它们当作代码来理解。

1

一个更完整的例子可能看起来像这样:

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:

抱歉!这是一个复制粘贴的错误。现在试试这个。

1

这并不是一件简单的事,你需要解析内容,并把图片和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

撰写回答