import asyncio
import typing
-from http.cookiejar import CookieJar
from types import TracebackType
from .auth import HTTPBasicAuth
from .models import (
URL,
AuthTypes,
+ Cookies,
+ CookieTypes,
Headers,
HeaderTypes,
QueryParamTypes,
def __init__(
self,
auth: AuthTypes = None,
+ cookies: CookieTypes = None,
ssl: SSLConfig = DEFAULT_SSL_CONFIG,
timeout: TimeoutConfig = DEFAULT_TIMEOUT_CONFIG,
pool_limits: PoolLimits = DEFAULT_POOL_LIMITS,
)
self.auth = auth
+ self.cookies = Cookies(cookies)
self.max_redirects = max_redirects
self.dispatch = dispatch
*,
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
*,
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
*,
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = False, # Note: Differs to usual default.
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data=data,
query_params=query_params,
headers=headers,
- cookies=cookies,
+ cookies=self.merge_cookies(cookies),
)
self.prepare_request(request)
response = await self.send(
def prepare_request(self, request: Request) -> None:
request.prepare()
+ def merge_cookies(self, cookies: CookieTypes = None) -> typing.Optional[CookieTypes]:
+ if cookies or self.cookies:
+ merged_cookies = Cookies(self.cookies)
+ merged_cookies.update(cookies)
+ return merged_cookies
+ return cookies
+
async def send(
self,
request: Request,
request, stream=stream, ssl=ssl, timeout=timeout
)
response.history = list(history)
+ self.cookies.extract_cookies(response)
history = [response] + history
if not response.is_redirect:
break
url = self.redirect_url(request, response)
headers = self.redirect_headers(request, url)
content = self.redirect_content(request, method)
- return Request(method=method, url=url, headers=headers, data=content)
+ cookies = self.merge_cookies(request.cookies)
+ return Request(method=method, url=url, headers=headers, data=content, cookies=cookies)
def redirect_method(self, request: Request, response: Response) -> str:
"""
)
self._loop = asyncio.new_event_loop()
+ @property
+ def cookies(self) -> Cookies:
+ return self._client.cookies
+
def request(
self,
method: str,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data=data,
query_params=query_params,
headers=headers,
- cookies=cookies,
+ cookies=self._client.merge_cookies(cookies),
)
self.prepare_request(request)
response = self.send(
*,
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
*,
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
*,
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = False, # Note: Differs to usual default.
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,
data: RequestData = b"",
query_params: QueryParamTypes = None,
headers: HeaderTypes = None,
- cookies: CookieJar = None,
+ cookies: CookieTypes = None,
stream: bool = False,
auth: AuthTypes = None,
allow_redirects: bool = True,