Exemplo n.º 1
0
 def wrapper(client, method, url, body=None, headers=None):
     cookiejar = LWPCookieJar()
     cookiejar._really_load(
         StringIO("#LWP-Cookies-2.0\n" + client.credential.get(field,'')),
         "cookies.txt",True,True)
     req = Request(url, body, headers or {}, method=method)
     cookiejar.clear_expired_cookies()
     cookiejar.add_cookie_header(req)
     status, headers, body = request(client,req.method,req.full_url,req.data,dict(req.header_items()))
     response = addinfourl(None, headers, req.full_url, status)
     cookiejar.extract_cookies(response,req)
     client.credential[field] = cookiejar.as_lwp_str()
     return (status, headers, body)
Exemplo n.º 2
0
 def wrapper(client, method, url, body=None, headers=None):
     cookiejar = LWPCookieJar()
     cookiejar._really_load(
         StringIO("#LWP-Cookies-2.0\n" +
                  client.credential.get(field, '')), "cookies.txt",
         True, True)
     req = Request(url, body, headers or {}, method=method)
     cookiejar.clear_expired_cookies()
     cookiejar.add_cookie_header(req)
     status, headers, body = request(client, req.method, req.full_url,
                                     req.data, dict(req.header_items()))
     response = addinfourl(None, headers, req.full_url, status)
     cookiejar.extract_cookies(response, req)
     client.credential[field] = cookiejar.as_lwp_str()
     return (status, headers, body)
Exemplo n.º 3
0
class HTTP(BaseHandler, Persistable):
    JSON = 'application/json; charset=UTF-8'
    URLENCODE = 'application/x-www-form-urlencoded; charset=UTF-8'
    FORMDATA = 'multipart/form-data'

    def __init__(self, profile, netloc):
        self.profile = profile
        self.netloc = netloc
        self._cookiejar = LWPCookieJar()
        self._credential = None
        opener = build_opener()
        for h in (HTTPCookieProcessor(self._cookiejar),
                  self):
            opener.add_handler(h)
        opener.addheaders = [('User-Agent', USER_AGENT)]

    def set_http_debuglevel(self, level):
        for handler in self.parent.handlers:
            if isinstance(handler, AbstractHTTPHandler):
                handler.set_http_debuglevel(level)

    def http_request(self, request):
        return request

    def https_request(self, request):
        return self.http_request(request)

    def http_response(self, request, response):
        return response

    def https_response(self, request, response):
        return self.http_response(request, response)

    def __getstate__(self):
        state = {"cookie": self._cookiejar.as_lwp_str()}
        if self._credential:
            state["credential"] = self._credential
        return json.dumps(state)

    def __setstate__(self, state):
        state = json.loads(state)
        self._cookiejar._really_load(StringIO("#LWP-Cookies-2.0\n" + state["cookie"]), "cookies.txt",True,True)
        self._credential = state.get("credential", None)

    def get_cookie(self, name):
        for cookie in self._cookiejar:
            if cookie.name == name:
                return cookie.value

    @task("HTTP {request.method} {request.full_url}", retry=True)
    async def _open(self, request, raw=False):
        while True:
            try:
                self.set_http_debuglevel(self.profile.debug)
                return self.parent.open(request)
            except AuthError as e:
                logger.warning("Login required, %s", e)
                if raw:
                    raise
                await self.profile.auth(self.netloc, self)
                request.remove_header("Cookie")

    def open(self, url, data=None, headers=None, method=None):
        return self._open(request(url, data, headers, method))

    def raw_open(self, url, data=None, headers=None, method=None):
        return self._open(request(url, data, headers, method), raw=True)