문제

할 수 있는 방법을 확인"살아있는 유지하"HTTP 요청을 사용하는 파이썬의 urllib2?

도움이 되었습니까?

해결책

사용 urlgrabber 도서관. 여기에는 http 1.1 및 keepalive를 지원하는 urllib2 용 HTTP 핸들러가 포함됩니다.

>>> import urllib2
>>> from urlgrabber.keepalive import HTTPHandler
>>> keepalive_handler = HTTPHandler()
>>> opener = urllib2.build_opener(keepalive_handler)
>>> urllib2.install_opener(opener)
>>> 
>>> fo = urllib2.urlopen('http://www.python.org')

참고 : UrlGrabber 버전을 사용해야합니다 3.9.0 또는 더 일찍 살아 유지 버전 3.9.1에서 모듈이 제거되었습니다

이있다 포트 keepalive 모듈의 파이썬 3.

다른 팁

노력하다 urllib3 다음과 같은 기능이 있습니다.

  • 여러 요청에 대해 동일한 소켓 연결 (HTTPConnectionPool 및 HTTPSConnectionPool)에 대해 재사용하십시오 (선택적인 클라이언트 측 인증서 확인 포함).
  • 파일 게시 (encode_multipart_formData).
  • 내장 리디렉션 및 검색 (선택 사항).
  • GZIP 및 디플레이트 디코딩을 지원합니다.
  • 스레드-안전 및 정신-안전.
  • 작고 이해하기 쉬운 코드베이스는 확장 및 구축에 적합합니다. 보다 포괄적 인 솔루션의 경우 요청을 살펴보십시오.

또는 훨씬 더 포괄적 인 솔루션 - 요청 - Keep-Alive를 지원합니다 버전 0.8.0 (내부적으로 urllib3를 사용하여). 특징:

  • 매우 간단한 헤드, 얻기, 게시, 퍼팅, 패치, 삭제 요청.
  • 비동기 요청에 대한 Gevent 지원.
  • 쿠키 지속성이있는 세션.
  • 기본, 다이제스트 및 사용자 정의 인증 지원.
  • 사전의 자동 양식 인코딩
  • 요청/응답 쿠키를위한 간단한 사전 인터페이스.
  • 멀티 파트 파일 업로드.
  • 유니 코드, GZIP 및 디플레이트 응답의 Automatc 디코딩.
  • 유니 코드 URL 및 도메인 이름에 대한 완전한 지원.

또는 체크 아웃 httplibhttpconnection.

불행하게도 keepalive.py 에서 제거되었 urlgrabber25Sep2009 년에 의하여 다음과 같이 변경 후에 urlgrabber 변경에 따라 달라집 pycurl(을 지원하는 keep-alive):

http://yum.baseurl.org/gitweb?p=urlgrabber.git;a=commit h=f964aa8bdc52b29a2c137a917c72eecd4c4dda94

그러나,당신은 아직도 얻을 수 있는 마지막 개정 keepalive.py 여기:

http://yum.baseurl.org/gitweb?p=urlgrabber.git;a=blob_plain;f=urlgrabber/keepalive.py;hb=a531cb19eb162ad7e0b62039d19259341f37f3a6

Urlgrabber는 Python 2.6에서 완전히 작동하지 않습니다. keepalive.py에서 다음과 같은 수정으로 문제를 해결했습니다.

recopalive.httphandler.do_open ()에서 이것을 제거하십시오

     if r.status == 200 or not HANDLE_ERRORS:
         return r

그리고 이것을 삽입하십시오

     if r.status == 200 or not HANDLE_ERRORS:
         # [speedplane] Must return an adinfourl object
         resp = urllib2.addinfourl(r, r.msg, req.get_full_url())
         resp.code = r.status
         resp.msg = r.reason
         return resp

집단적 고통과 사용을 피하십시오 요청 대신에. 기본적으로 올바른 작업을 수행하고 해당되는 경우 repoy-alive를 사용합니다.

다음은 SuredSafe가 아니지만 계속 유지하는 다소 유사한 Urlopen ()이 있습니다.

try:
    from http.client import HTTPConnection, HTTPSConnection
except ImportError:
    from httplib import HTTPConnection, HTTPSConnection
import select
connections = {}


def request(method, url, body=None, headers={}, **kwargs):
    scheme, _, host, path = url.split('/', 3)
    h = connections.get((scheme, host))
    if h and select.select([h.sock], [], [], 0)[0]:
        h.close()
        h = None
    if not h:
        Connection = HTTPConnection if scheme == 'http:' else HTTPSConnection
        h = connections[(scheme, host)] = Connection(host, **kwargs)
    h.request(method, '/' + path, body, headers)
    return h.getresponse()


def urlopen(url, data=None, *args, **kwargs):
    resp = request('POST' if data else 'GET', url, data, *args, **kwargs)
    assert resp.status < 400, (resp.status, resp.reason, resp.read())
    return resp
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top