2014-02-06 2 views
0

은 내가python httplib.HTTPSConnection이 (bugzilla.mozilla.org에) 제대로 연결되지 않았습니까?

내가 다음과 같은 코드를 작성,

# 
import httplib 
host = 'bugzilla.mozilla.org' 

h = httplib.HTTPSConnection(host) 
h.putrequest('GET', 'https://bugzilla.mozilla.org/index.cgi') 
h.putheader('Accept', 'application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */*') 
h.putheader('User-Agent', "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)") 
h.putheader('Host', host) 
h.putheader('Connection', 'Keep-Alive') 
h.endheaders() 

response = h.getresponse() 
print response.read() 

서버가 항상

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>301 Moved Permanently</title> 
</head><body> 
<h1>Moved Permanently</h1> 
<p>The document has moved <a href="https://bugzilla.mozilla.org/index.cgi">here</a>.</p> 
</body></html> 

을 반환 버그질라에서 정보를 (bugzilla.mozilla.org) 싶어하지만,이 코드는 잘 작동 다른 https 서버. 아무도 내가 잘못 알고 있다는 것을 알고 있습니까?

답변

1

httplib는 리디렉션 (301 HTTP 코드)를 따르지 않는 대신 urrlib2을 사용할 수

from urllib2 import Request, urlopen 

req = Request('https://bugzilla.mozilla.org/index.cgi') 
req.add_header('Accept', 'application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */*') 
req.add_header('User-Agent', "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)") 
response = urlopen(req) #NOTE: it doesn't check server's ssl certificate 
print(response.headers) 
content = response.read() 
관련 문제