Exemple #1
0
    class ClientHandler(urllib.request.BaseHandler):
        DEFAULT_HEADERS = {
            "User-Agent":
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
            "Accept":
            "text/html, application/xhtml+xml, application/xml; q=0.9, image/webp, */*; q=0.8",
            "Accept-Encoding": "gzip, deflate"
        }

        def __init__(self):
            self.headers = self.DEFAULT_HEADERS
            self.cookies = MozillaCookieJar()

        def load_cookie(self, fpath):
            self.cookies.load(fpath)

        def save_cookie(self, fpath):
            self.cookies.save(fpath)

        def set_header(self, name, value):
            self.headers[name] = value

        def set_cookie(self, cookie_string):
            cookie = self._make_cookie(cookie_string)
            if cookie:
                self.cookies.set_cookie(cookie)

        def _make_cookie(self, cookie_string):
            return HttpClient.ClientCookie().make(cookie_string)

        def _request_add_headers(self, request):
            for name, value in list(self.headers.items()):
                request.add_header(name, value)
                request.add_unredirected_header(name, value)
            return self

        def _request_add_cookies(self, request):
            self.cookies.add_cookie_header(request)

        def _response_extract_cookies(self, request, response):
            self.cookies.extract_cookies(response, request)
            return self

        def _response_decompress_content(self, request, response):
            encoding = response.headers.get("content-encoding", "")
            if encoding == "gzip":
                response.fp = gzip.GzipFile(fileobj=StringIO(response.read()))
            elif encoding == "deflate":
                response.fp = zlib.decompress(response.read())
            else:
                pass
            return self

        def http_request(self, request):
            self._request_add_headers(request)
            self._request_add_cookies(request)
            return request

        def http_response(self, request, response):
            self._response_extract_cookies(
                request,
                response)._response_decompress_content(request, response)
            return response

        https_request = http_request
        https_response = http_response