CDT*_*CDT 2 python debugging http tornado web
#!/usr/bin/env python
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.httpclient
import urllib
import json
import datetime
import time
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
config = {
'proxy_host': '58.59.21.228',
'proxy_port': 25,
'proxy_username': 'yz',
'proxy_password': 'fangbinxingqusi',
}
def handle_request(response):
if response.error:
print "Error:", response.error
tornado.httpclient.AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")
class IndexHandler(tornado.web.RequestHandler):
def get(self):
client = tornado.httpclient.AsyncHTTPClient()
response = client.fetch("http://twitter.com/", handle_request,
**config)
self.write(response.body)
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)],
debug=True)
httpserver = tornado.httpserver.HTTPServer(app)
httpserver.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
在运行时,报告方法中的response对象get()是一种None类型.如何在fetch()方法中获得get()方法的响应?
您正在使用AsyncHTTPClient,因此该fetch方法不返回任何内容.你需要使用"异步"装饰器并记得调用所调用finish的回调fetch.
这是代码:
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.httpclient
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
config = {
'proxy_host': '58.59.21.228',
'proxy_port': 25,
'proxy_username': 'yz',
'proxy_password': 'fangbinxingqusi',
}
tornado.httpclient.AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")
class IndexHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
client = tornado.httpclient.AsyncHTTPClient()
client.fetch("http://twitter.com/", self.handle_request, **config)
def handle_request(self, response):
if response.error:
print("Error:", response.error)
else:
self.write(response.body)
self.finish()
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)], debug=True)
httpserver = tornado.httpserver.HTTPServer(app)
httpserver.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
您还可以使用Tornado的gen来使您的处理程序更漂亮:
class IndexHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.engine
def get(self):
client = tornado.httpclient.AsyncHTTPClient()
response = yield tornado.gen.Task(client.fetch, "http://twitter.com/",
**config)
if response.error:
self.write("Error: %s" % response.error)
else:
self.write(response.body)
self.finish()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9423 次 |
| 最近记录: |