2013-11-21 4 views
0

Python3에 문제가 있습니다.Python3 및 http.client의 문제

파일의 경로를 읽고 url을 입력하는 서버의 "200 OK"와 같은 http 상태 코드를 얻으려고합니다.

그것은 일부 서버와 함께 작동하지만, 다른 사람과 나는 아래의 문제가 있습니다

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") 

도와 주시겠습니까?

감사합니다 !!!

답변

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로 할 수있는 일이 많지 않습니다. 자신의 요청 핸들러를 구현하여이 서버에서 사용할 수 있습니다.

+0

대신 'curl -v'를 사용해보십시오. 또한 요청과 함께 보내는 헤더를 폐기 할 수 있습니까? – aspyct

+0

답장을 보내 주셔서 감사합니다. 나는이 같은 얻을 명령 -v' 컬 '로하고'컬 -I'을 실행 ... HTTP/1.1 200 OK 하지만 내 프로그램에 내가 할 http.client.BadStatusLine : < ! DOCTYPE HTML PUBLIC "-// IETF // DTD HTML 2.0 // EN"> 파이썬 2에서 코드를 만들면 문제가 없습니다 ... – user3018205

+0

내 의견의 다른 부분으로 이어지는 : 요청 헤더? 아니면이 문제가있는 서버의 주소를 제공 할 수 있습니까? – aspyct