|
|
|
@ -1587,9 +1587,21 @@ class YoutubeDLRedirectHandler(compat_urllib_request.HTTPRedirectHandler):
|
|
|
|
|
CONTENT_HEADERS = ("content-length", "content-type")
|
|
|
|
|
# NB: don't use dict comprehension for python 2.6 compatibility
|
|
|
|
|
newheaders = {k: v for k, v in req.headers.items() if k.lower() not in CONTENT_HEADERS}
|
|
|
|
|
|
|
|
|
|
# A 303 must either use GET or HEAD for subsequent request
|
|
|
|
|
# https://datatracker.ietf.org/doc/html/rfc7231#section-6.4.4
|
|
|
|
|
if code == 303 and m != 'HEAD':
|
|
|
|
|
m = 'GET'
|
|
|
|
|
# 301 and 302 redirects are commonly turned into a GET from a POST
|
|
|
|
|
# for subsequent requests by browsers, so we'll do the same.
|
|
|
|
|
# https://datatracker.ietf.org/doc/html/rfc7231#section-6.4.2
|
|
|
|
|
# https://datatracker.ietf.org/doc/html/rfc7231#section-6.4.3
|
|
|
|
|
if code in (301, 302) and m == 'POST':
|
|
|
|
|
m = 'GET'
|
|
|
|
|
|
|
|
|
|
return compat_urllib_request.Request(
|
|
|
|
|
newurl, headers=newheaders, origin_req_host=req.origin_req_host,
|
|
|
|
|
unverifiable=True)
|
|
|
|
|
unverifiable=True, method=m)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def extract_timezone(date_str):
|
|
|
|
|