-2

我正在使用 Google App Engine 提供的 urlfetch 来获取 URL 内容。但我收到 500 内部服务器错误。

这是我正在使用的完整应用程序代码:-

比较-hatke.py

import urllib2
from google.appengine.api import urlfetch
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import datetime

class MainPage(webapp.RequestHandler):
    def curlTry:
        url = "http://www.google.com/"
        result = urlfetch.fetch(url)
        if result.status_code == 200:
            print(result.content)

application = webapp.WSGIApplication([('/', MainPage)],debug=True)


def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

应用程序.yaml

application: compare-hatke
version: 3
runtime: python27
api_version: 1
threadsafe: false

handlers:
- url: /.*
  script: compare-hatke.app

这是错误日志。我无法理解他们提到的语法错误

  Traceback (most recent call last):
  File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 196, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 269, in _LoadHandler
    raise ImportError('%s has no attribute %s' % (handler, name))
ImportError: <module 'compare-hatke' from '/base/data/home/apps/s~compare-hatke/3.365290288779373200/compare-hatke.pyc'> has no attribute app

请告诉我我在哪里失踪。谢谢 !

4

2 回答 2

2

类中的 Python 方法需要引用函数定义中的 self 参数才能识别它所属的实例。这是您的基本语法错误。

更正这一点,您仍然需要设置一个路由,以便您的 MainPage 类可以处理 GET 请求。这很容易通过在 GAE 中使用 get 方法来完成。一旦你有这个工作,文档就会向你展示其他方法。

试试这个:

class MainPage(webapp.RequestHandler):
    def get(self): # responds to http GET, and adds self parameter
        url = "http://www.google.com/"
        result = urlfetch.fetch(url)
        if result.status_code == 200:
            print(result.content)
于 2013-02-14T03:20:21.873 回答
2

您正在使用带有 main() 方法的 python2.5 样式应用程序定义。

您需要重新访问 2.7 教程https://developers.google.com/appengine/docs/python/gettingstartedpython27/helloworld,您会看到您的应用程序应该看起来像

import urllib2
from google.appengine.api import urlfetch
from google.appengine.ext import webapp2

import datetime

class MainPage(webapp2.RequestHandler):
    def curlTry(self):
        url = "http://www.google.com/"
        result = urlfetch.fetch(url)
        if result.status_code == 200:
           self.response.write(result.content)

app = webapp2.WSGIApplication([('/', MainPage)],debug=True)

以匹配您的 app.yaml 定义。您的 app.yaml 指的是compare-hatke.app在某处定义的compare-hatke.py需求app,(根据我的示例)

此外,您应该将 webapp2 与 2.7 一起使用,并且不确定您的 curlTry 类方法将如何被调用,但这是您的问题的一个单独问题。

我建议您从头开始并完成 2.7 教程,因为您在这里缺少一些内容。

我已经修改了代码以反映应该使用 response.write,并使处理程序成为实例方法而不是类方法。但是,您当前的 app.yaml 不会根据您发布的 app.yaml 和当前代码将 GET/POST 请求映射到 curlTry。再看看我在这里链接的教程。

于 2013-02-14T05:49:08.997 回答