Python3和http.client的问题

时间:2013-11-21 15:37:53

标签: python-3.x httpclient

我遇到Python3的问题。

我正在尝试获取http状态代码,例如" 200 OK"服务器从文件中读取路径并输入网址。

适用于某些服务器,但对于其他服务器,我遇到以下问题:

Traceback (most recent call last):
  File "simple_program.py", line 55, in <module>
    main()
  File "simple_program.py", line 52, in main
    parser(url)
  File "simple_program.py", line 27, in parser
    r1 = conn.getresponse()
  File "/usr/lib/python3.3/http/client.py", line 1143, in getresponse
    response.begin()
  File "/usr/lib/python3.3/http/client.py", line 354, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.3/http/client.py", line 336, in _read_status
    raise BadStatusLine(line)
  http.client.BadStatusLine: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

这是代码失败的部分。

                    conn = http.client.HTTPConnection(url)
                    conn.request("GET", path)
                    r1 = conn.getresponse()
                    conn.close()
                    print(url_path, r1.status, r1.reason)
                    print("\n")

你能帮帮我吗?

感谢!!!

1 个答案:

答案 0 :(得分:0)

看起来服务器没有发送HTTP状态行...这听起来很奇怪,但有一种方法可以验证这一点。

您可以使用curl转储响应标头。例如,在我的网站上:

$ curl -I http://aspyct.org
HTTP/1.1 200 OK
Date: Thu, 21 Nov 2013 15:42:16 GMT
Content-Type: text/html
Content-Length: 10645
Last-Modified: Sat, 20 Jul 2013 14:09:39 GMT
Connection: keep-alive
Vary: Accept-Encoding
Expires: Thu, 21 Nov 2013 15:42:15 GMT
Cache-Control: no-cache
Accept-Ranges: bytes

你有什么用?如果没有,可能服务器本身不尊重HTTP协议。

在这种情况下,你可以用python stdlib做些什么。您可能希望实现自己的请求处理程序,并在这些服务器上使用它。