2010-12-08 3 views
4

URLLIB 파이썬을 사용하여 HTTP/1.1에서 살아 남기 위해 :어떻게 지금은이 일을하고 들어

무슨 일이 일어나고 무엇
url = 'someurl' 
headers = '(('HOST', 'somehost'),/ 
      ('Connection', 'keep-alive'),/ 
      ('Accept-Encoding' , 'gzip,deflate')) 
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor()) 
for h in headers: 
    opener.addheaders.append(x) 
data = 'some logging data' #username, pw etc. 
opener.open('somesite/login.php, data) 

res = opener.open(someurl) 
data = res.read() 
... some stuff here... 
res1 = opener.open(someurl2) 
data = res1.read() 
etc. 

이있다 (Python3, URLLIB);

gzipped 응답을 서버에서 계속 가져오고 (로그인하지 않은 경우 사용할 수없는 일부 내용을 가져 오는 중입니다) 로그인 상태를 유지했지만 모든 요청 opener.open 사이에 연결이 끊어졌습니다.

연결이 매우 느리고 매회 새로운 연결이있는 것처럼 보입니다. 두 가지 질문 :

a) 사실 연결이 체재 중인지/죽어가는 지 어떻게 테스트 할 수 있습니까?
b) 다른 URL에 대한 요청이있을 때까지이를 유지하는 방법은 무엇입니까?

+0

a) 트래픽을 스니핑하면 보관 여부를 확인하는 간단한 방법입니다. 서버가 keepalive도 지원하는지 확인하십시오. b)의 경우, 적어도 python2.x에는 keepalive 할 수있는 핸들러를 지정하는 방법이 있지만 디폴트로 보이지는 않습니다. – Robert

+1

duplicate http://stackoverflow.com/questions/1037406/python-urllib2-with-keep-alive – khachik

+0

글쎄, 처음에는 python3이고 다른 스레드에서 권장되는 urlgrabber는 2.5 용이고 이전과 이후에는 선호합니다 이처럼 단순한 작업을 위해 외부 라이브러리를 사용하지 마십시오. 특히 그 것들이 어떻게 작동하는지 이해하기를 원하기 때문에. –

답변

1

이 매우 지연 대답을 할 것이다 :)주의 :하지만, 당신은 urllib3을 볼 수

. 파이썬 2.x 용이지만 README 문서를 볼 때 그 아이디어를 얻을 수 있습니다.

그리고 네, 기본적으로 URLLIB 살아 연결을 유지하지 않습니다, 지금 파이썬 3 urllib3 구현하고있어 내 toolbag :

0

아직 모르고 그냥 경우, 파이썬 요청에 머물고있다 urllib3 덕분에 지속 기능을 제공합니다.

관련 문제