Skip to content

Commit 2d9dcb9

Browse files
authored
Fix redirect behavior of datasets.utils.download_url (#3564) (#3566)
* use head request for redirects * remove requests dependency
1 parent 0dbc7d8 commit 2d9dcb9

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

torchvision/datasets/utils.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,18 +67,20 @@ def check_integrity(fpath: str, md5: Optional[str] = None) -> bool:
6767
return check_md5(fpath, md5)
6868

6969

70-
def _get_redirect_url(url: str, max_hops: int = 10) -> str:
71-
import requests
72-
73-
for hop in range(max_hops + 1):
74-
response = requests.get(url)
70+
def _get_redirect_url(url: str, max_hops: int = 3) -> str:
71+
initial_url = url
72+
headers = {"Method": "HEAD", "User-Agent": USER_AGENT}
7573

76-
if response.url == url or response.url is None:
77-
return url
74+
for _ in range(max_hops + 1):
75+
with urllib.request.urlopen(urllib.request.Request(url, headers=headers)) as response:
76+
if response.url == url or response.url is None:
77+
return url
7878

79-
url = response.url
79+
url = response.url
8080
else:
81-
raise RecursionError(f"Too many redirects: {max_hops + 1})")
81+
raise RecursionError(
82+
f"Request to {initial_url} exceeded {max_hops} redirects. The last redirect points to {url}."
83+
)
8284

8385

8486
def _get_google_drive_file_id(url: str) -> Optional[str]:

0 commit comments

Comments
 (0)