@@ -275,6 +275,21 @@ async def _request_json(
275275 request_headers ["Sec-Fetch-Dest" ] = "empty"
276276 request_headers ["Sec-Fetch-Mode" ] = "cors"
277277 request_headers ["Sec-Fetch-Site" ] = "same-origin"
278+ if url .startswith (self ._login_urls ["v6_login" ]):
279+ request_headers ["Referrer" ] = f"{ self .base_url } /login.cgi"
280+ request_headers ["Origin" ] = self .base_url
281+ request_headers ["Accept" ] = (
282+ "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
283+ )
284+ request_headers ["User-Agent" ] = (
285+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
286+ )
287+ request_headers ["Sec-Fetch-Dest" ] = "document"
288+ request_headers ["Sec-Fetch-Mode" ] = "navigate"
289+ request_headers ["Sec-Fetch-Site" ] = "same-origin"
290+ request_headers ["Sec-Fetch-User" ] = "?1"
291+ request_headers ["Cache-Control" ] = "no-cache"
292+ request_headers ["Pragma" ] = "no-cache"
278293
279294 try :
280295 if (
@@ -304,9 +319,14 @@ async def _request_json(
304319 _LOGGER .error (
305320 "TESTv%s - Response code: %s" , self .api_version , response .status
306321 )
322+ _LOGGER .error (
323+ "TESTv%s - Response headers: %s" ,
324+ self .api_version ,
325+ dict (response .headers ),
326+ )
307327
308328 # v6 responds with a 302 redirect and empty body
309- if url != self ._login_urls ["v6_login" ]:
329+ if not url . startswith ( self ._login_urls ["v6_login" ]) :
310330 self .api_version = 6
311331 response .raise_for_status ()
312332
@@ -416,6 +436,21 @@ async def login(self) -> None:
416436 raise
417437 else :
418438 _LOGGER .error ("TESTv%s - returning from simple multipart" , self .api_version )
439+ # Finalize session by visiting /index.cgi
440+ _LOGGER .error (
441+ "TESTv%s - Finalizing session with GET to /index.cgi" , self .api_version
442+ )
443+ with contextlib .suppress (Exception ):
444+ await self ._request_json (
445+ "GET" ,
446+ f"{ self .base_url } /index.cgi" ,
447+ headers = {
448+ "Referer" : f"{ self .base_url } /login.cgi" ,
449+ "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" ,
450+ },
451+ authenticated = True ,
452+ allow_redirects = True ,
453+ )
419454 return # Success
420455
421456 async def status (self ) -> AirOSDataModel :
0 commit comments