복붙노트

[PYTHON] 살아있는 파이썬 urllib2

PYTHON

살아있는 파이썬 urllib2

어떻게하면 파이썬의 urllib2를 사용하여 "살아있다"HTTP 요청을 할 수 있습니까?

해결법

  1. ==============================

    1.urlgrabber 라이브러리를 사용하십시오. 여기에는 HTTP 1.1 및 keepalive를 지원하는 urllib2 용 HTTP 처리기가 포함됩니다.

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

    참고 : 버전 3.9.1에서 keepalive 모듈이 제거되었으므로 urlgrabber 버전 3.9.0 이하를 사용해야합니다.

    파이썬 3에 대한 킵 얼라이브 모듈의 포트가 있습니다.

  2. ==============================

    2.다음 기능이있는 urllib3을 사용해보십시오.

    다음 기능이있는 urllib3을 사용해보십시오.

    또는보다 포괄적 인 솔루션 - 요청 - 버전 0.8.0 (내부적으로 urllib3 사용)에서 연결 유지를 지원하고 다음과 같은 기능을 제공합니다.

  3. ==============================

    3.또는 httplib의 HTTPConnection을 확인하십시오.

    또는 httplib의 HTTPConnection을 확인하십시오.

  4. ==============================

    4.불행히도 keepalive.py는 2009 년 9 월 25 일에 urlgrabber가 keepalive를 지원하는 pycurl에 의존하여 변경된 후 urlgrabber에서 다음과 같이 변경되었습니다.

    불행히도 keepalive.py는 2009 년 9 월 25 일에 urlgrabber가 keepalive를 지원하는 pycurl에 의존하여 변경된 후 urlgrabber에서 다음과 같이 변경되었습니다.

    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

  5. ==============================

    5.urlgrabber는 Python 2.6에서 완전히 작동하지 않습니다. keepalive.py에서 다음과 같이 수정하여 이슈를 수정했습니다.

    urlgrabber는 Python 2.6에서 완전히 작동하지 않습니다. keepalive.py에서 다음과 같이 수정하여 이슈를 수정했습니다.

    keepalive.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
    
  6. ==============================

    6.집단 통증을 피 하시고 대신 요청을 사용하십시오. 해당하는 경우 기본값으로 올바른 작업을 수행하고 연결 유지를 사용합니다.

    집단 통증을 피 하시고 대신 요청을 사용하십시오. 해당하는 경우 기본값으로 올바른 작업을 수행하고 연결 유지를 사용합니다.

  7. ==============================

    7.쓰레드 세이프가 아니지만, keep-alive를하는 다소 비슷한 urlopen ()이 있습니다.

    쓰레드 세이프가 아니지만, keep-alive를하는 다소 비슷한 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
    
  8. from https://stackoverflow.com/questions/1037406/python-urllib2-with-keep-alive by cc-by-sa and MIT license