2012-02-13 4 views
7

httplib2와 urllib2를 사용하여이 URL에서 페이지를 가져 오려고했지만 모두 작동하지 않아이 예외가 발생했습니다.왜이 URL은 httplib2 및 urllib2를 사용하여 BadStatusLine을 발생 시키나요?

content = conn.request(uri="http://www.zdnet.co.kr/news/news_print.asp?artice_id=20110727092902") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/httplib2/__init__.py", line 1129, in request 
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
    File "/usr/lib/python2.7/dist-packages/httplib2/__init__.py", line 901, in _request 
    (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
    File "/usr/lib/python2.7/dist-packages/httplib2/__init__.py", line 871, in _conn_request 
    response = conn.getresponse() 
    File "/usr/lib/python2.7/httplib.py", line 1027, in getresponse 
    response.begin() 
    File "/usr/lib/python2.7/httplib.py", line 407, in begin 
    version, status, reason = self._read_status() 
    File "/usr/lib/python2.7/httplib.py", line 371, in _read_status 
    raise BadStatusLine(line) 

HTTP 헤더는이

http://www.zdnet.co.kr/news/news_print.asp?artice_id=20110727092902 

GET /news/news_print.asp?artice_id=20110727092902 HTTP/1.1 
Host: www.zdnet.co.kr 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Cookie: RMID=7d83495d4f336fe0; __utma=37206251.1552605885.1328771258.1328771258.1329070845.2; __utmz=37206251.1328771258.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ASPSESSIONIDCSQCQTDD=BCLEHPPDEPHEBJDLCFNDMKDN; __utmc=37206251; ASPSESSIONIDSSQCQQCB=MJPLMOJAFPDFCLONCANBIKHN; _EXEN=2 
X-FireLogger: 1.2 

HTTP/1.1 200 OK 
Date: Mon, 13 Feb 2012 18:02:56 GMT 
Content-Length: 19158 
Content-Type: text/html;charset=UTF-8; Charset=UTF-8 
Set-Cookie: ASPSESSIONIDSQSDQRDB=NGAIFHKAGDIOGEMANAOLLKKF; path=/ 
Cache-Control: private 

모든 단서 같았다?

+0

connect 문을 게시하십시오. – Nix

답변

3

이 나를 위해 잘 작동이 :

import urllib2 

opener = urllib2.build_opener() 

headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1', 
} 

opener.addheaders = headers.items() 
response = opener.open("http://www.zdnet.co.kr/news/news_print.asp?artice_id=20110727092902") 

print response.headers 
print response.read() 

웹 사이트는 User-Agent 문자열없이 발생하는 모든 요청을 무시합니다.

1

이 웹 페이지는 사용자 에이전트를 허용하지 않습니다. 당신은 다음과 같이 변경할 수 있습니다 :

>>> import urllib2 
>>> user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
>>> headers = { 'User-Agent' : user_agent } 
>>> r = urllib2.Request('http://www.zdnet.co.kr/news/news_print.asp?artice_id=20110727092902', headers=headers) 
>>> fd = urllib2.urlopen(r) 
>>> print fd[20:] 
'<!DOCTYPE html PUBLI' 
2

을 내 코드에서, 나는 예외가 나타납니다

from urllib2 import urlopen 
    content = urlopen(page).read() 

를 사용하는 경우. 그러나 사용하는 경우

import urllib 
    content = urllib.urlopen(page).read() 

모두 괜찮습니다. 아마도 도움이 될 것입니다. httplib2 0.8 설치 한 후 비슷한 문제로 여기까지 모든 사람들에게

+1

내 문제가 해결되었습니다. 감사. 그러나 urllib2가 작동하지 않는 이유를 아는 것이 좋을 것입니다. –

4

:

버전 0.8은 연결이 HTTP 연결 유지와 관련하여 처리와 회귀가 있습니다. 버그 보고서를 참조하십시오 : https://code.google.com/p/httplib2/issues/detail?id=250

이 문제에 대한 해결책이 있지만 지금까지 릴리스되지 않았습니다. 그때까지는 httplib2 0.7.7 만 사용하십시오.