95
95
from .helpers import (
96
96
_SENTINEL ,
97
97
EMPTY_BODY_METHODS ,
98
- BasicAuth ,
98
+ AuthBase ,
99
99
TimeoutHandle ,
100
100
frozen_dataclass_decorator ,
101
101
get_env_proxy_for_url ,
@@ -174,7 +174,7 @@ class _RequestOptions(TypedDict, total=False):
174
174
cookies : Union [LooseCookies , None ]
175
175
headers : Union [LooseHeaders , None ]
176
176
skip_auto_headers : Union [Iterable [str ], None ]
177
- auth : Union [BasicAuth , None ]
177
+ auth : Union [AuthBase , None ]
178
178
allow_redirects : bool
179
179
max_redirects : int
180
180
compress : Union [str , bool ]
@@ -183,7 +183,7 @@ class _RequestOptions(TypedDict, total=False):
183
183
raise_for_status : Union [None , bool , Callable [[ClientResponse ], Awaitable [None ]]]
184
184
read_until_eof : bool
185
185
proxy : Union [StrOrURL , None ]
186
- proxy_auth : Union [BasicAuth , None ]
186
+ proxy_auth : Union [AuthBase , None ]
187
187
timeout : "Union[ClientTimeout, _SENTINEL, None]"
188
188
ssl : Union [SSLContext , bool , Fingerprint ]
189
189
server_hostname : Union [str , None ]
@@ -270,9 +270,9 @@ def __init__(
270
270
cookies : Optional [LooseCookies ] = None ,
271
271
headers : Optional [LooseHeaders ] = None ,
272
272
proxy : Optional [StrOrURL ] = None ,
273
- proxy_auth : Optional [BasicAuth ] = None ,
273
+ proxy_auth : Optional [AuthBase ] = None ,
274
274
skip_auto_headers : Optional [Iterable [str ]] = None ,
275
- auth : Optional [BasicAuth ] = None ,
275
+ auth : Optional [AuthBase ] = None ,
276
276
json_serialize : JSONEncoder = json .dumps ,
277
277
request_class : Type [ClientRequest ] = ClientRequest ,
278
278
response_class : Type [ClientResponse ] = ClientResponse ,
@@ -429,7 +429,7 @@ async def _request(
429
429
cookies : Optional [LooseCookies ] = None ,
430
430
headers : Optional [LooseHeaders ] = None ,
431
431
skip_auto_headers : Optional [Iterable [str ]] = None ,
432
- auth : Optional [BasicAuth ] = None ,
432
+ auth : Optional [AuthBase ] = None ,
433
433
allow_redirects : bool = True ,
434
434
max_redirects : int = 10 ,
435
435
compress : Union [str , bool ] = False ,
@@ -440,7 +440,7 @@ async def _request(
440
440
] = None ,
441
441
read_until_eof : bool = True ,
442
442
proxy : Optional [StrOrURL ] = None ,
443
- proxy_auth : Optional [BasicAuth ] = None ,
443
+ proxy_auth : Optional [AuthBase ] = None ,
444
444
timeout : Union [ClientTimeout , _SENTINEL , None ] = sentinel ,
445
445
ssl : Union [SSLContext , bool , Fingerprint ] = True ,
446
446
server_hostname : Optional [str ] = None ,
@@ -672,6 +672,13 @@ async def _request(
672
672
resp = await req .send (conn )
673
673
try :
674
674
await resp .start (conn )
675
+ # Try performing digest authentication. It returns
676
+ # True if we need to resend the request, as
677
+ # DigestAuth is a bit of a handshake. This is
678
+ # a no-op for BasicAuth. If it
679
+ if auth is not None and auth .authenticate (resp ):
680
+ resp .close ()
681
+ continue
675
682
except BaseException :
676
683
resp .close ()
677
684
raise
@@ -824,12 +831,12 @@ def ws_connect(
824
831
autoclose : bool = True ,
825
832
autoping : bool = True ,
826
833
heartbeat : Optional [float ] = None ,
827
- auth : Optional [BasicAuth ] = None ,
834
+ auth : Optional [AuthBase ] = None ,
828
835
origin : Optional [str ] = None ,
829
836
params : Query = None ,
830
837
headers : Optional [LooseHeaders ] = None ,
831
838
proxy : Optional [StrOrURL ] = None ,
832
- proxy_auth : Optional [BasicAuth ] = None ,
839
+ proxy_auth : Optional [AuthBase ] = None ,
833
840
ssl : Union [SSLContext , bool , Fingerprint ] = True ,
834
841
server_hostname : Optional [str ] = None ,
835
842
proxy_headers : Optional [LooseHeaders ] = None ,
@@ -872,12 +879,12 @@ async def _ws_connect(
872
879
autoclose : bool = True ,
873
880
autoping : bool = True ,
874
881
heartbeat : Optional [float ] = None ,
875
- auth : Optional [BasicAuth ] = None ,
882
+ auth : Optional [AuthBase ] = None ,
876
883
origin : Optional [str ] = None ,
877
884
params : Query = None ,
878
885
headers : Optional [LooseHeaders ] = None ,
879
886
proxy : Optional [StrOrURL ] = None ,
880
- proxy_auth : Optional [BasicAuth ] = None ,
887
+ proxy_auth : Optional [AuthBase ] = None ,
881
888
ssl : Union [SSLContext , bool , Fingerprint ] = True ,
882
889
server_hostname : Optional [str ] = None ,
883
890
proxy_headers : Optional [LooseHeaders ] = None ,
@@ -1247,7 +1254,7 @@ def skip_auto_headers(self) -> FrozenSet[istr]:
1247
1254
return self ._skip_auto_headers
1248
1255
1249
1256
@property
1250
- def auth (self ) -> Optional [BasicAuth ]: # type: ignore[misc]
1257
+ def auth (self ) -> Optional [AuthBase ]:
1251
1258
"""An object that represents HTTP Basic Authorization"""
1252
1259
return self ._default_auth
1253
1260
@@ -1412,8 +1419,7 @@ def request(
1412
1419
headers - (optional) Dictionary of HTTP Headers to send with
1413
1420
the request
1414
1421
cookies - (optional) Dict object to send with the request
1415
- auth - (optional) BasicAuth named tuple represent HTTP Basic Auth
1416
- auth - aiohttp.helpers.BasicAuth
1422
+ auth - (optional) something implementing AuthBase for authentication
1417
1423
allow_redirects - (optional) If set to False, do not follow
1418
1424
redirects
1419
1425
version - Request HTTP version.
0 commit comments