Python Tornado脚本在实时主机上获取响应代码500

Python Tornado脚本在实时主机上获取响应代码500,python,ssl,tornado,Python,Ssl,Tornado,此脚本使用tornado在一些活动主机上获取http响应代码500。请不要介意这个循环。这是因为过于简化了我的代码块。我尝试过使用ip,但没有用 #!/usr/bin/python import tornado from tornado import httpclient from tornado import gen from tornado.httpclient import AsyncHTTPClient gloop = tornado.ioloop.IOLoop.instance()

此脚本使用tornado在一些活动主机上获取http响应代码500。请不要介意这个循环。这是因为过于简化了我的代码块。我尝试过使用ip,但没有用

#!/usr/bin/python
import tornado
from tornado import httpclient
from tornado import gen
from tornado.httpclient import AsyncHTTPClient

gloop = tornado.ioloop.IOLoop.instance()

@gen.engine
def process(url):
    print url
    try:
        http_client = httpclient.AsyncHTTPClient()
        request = tornado.httpclient.HTTPRequest(url=str(url), connect_timeout=5.0, validate_cert = False, request_timeout=5.0, follow_redirects=True)
        response = yield tornado.gen.Task(http_client.fetch, request)
        print url
        print response.code
        if response.error: raise Exception(response.error)
    except Exception as e:
        print e

gloop.add_callback(process, 'http://www.dhlsameday.com')

tornado.httpclient.AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")
gloop.start()

尽管证书不可信。起初我怀疑对机器人程序来说是安全的,但是这个网站在错误处理方面有问题,它需要
接受语言
。甚至连卷曲都失败了。要开始工作,只需传递该标题:

    headers = {"Accept-Language": "en-US;q=0.7,en;q=0.3"}
    request = tornado.httpclient.HTTPRequest(url=str(url), headers=headers, connect_timeout=5.0, validate_cert = False, request_timeout=5.0, follow_redirects=True) 
我建议添加更多常见的浏览器标题

  • 接受
  • 接受编码
  • 接受语言
  • 联系
  • 用户代理(某些浏览器不被视为bot)

只需将
validate\u cert=False
设置为
HTTPRequest
的参数。完成此操作后,其内部错误为500。您的脚本是HTTP客户端。您必须处理来自服务器的5xx和4xx错误。谢谢matagus,但我应该从服务器获得HTTPClientResponse,不是吗?我从浏览器中获取页面,但不是从该脚本(在某些主机上)获取。尝试将浏览器代理添加到请求参数中,但没有帮助…:(@matagus简单地说,使用浏览器dhlsameday得到200,但为什么脚本得到500?