wget.download()函数显示HTTP错误404



当我运行这个时

wget.download("http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB")

它显示此错误代码

File "C:Program FilesPython39liburllibrequest.py", line 641, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)urllib.error.HTTPError: HTTP Error 404: Not Found

但当我手动运行wget http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB时,运行得非常好

我调查了wget.download源代码,似乎有一个错误,源代码

if PY3K:
# Python 3 can not quote URL as needed
binurl = list(urlparse.urlsplit(url))
binurl[2] = urlparse.quote(binurl[2])
binurl = urlparse.urlunsplit(binurl)
else:
binurl = url

所以它假设URL需要引用非法字符,比如%符号后的代码取代的空格,但这已经完成了,因为您的URL包含%20而不是空格。您的URL被更改,尽管它不应该

import urllib.parse as urlparse
url = "http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB"
binurl = list(urlparse.urlsplit(url))
binurl[2] = urlparse.quote(binurl[2])
binurl = urlparse.urlunsplit(binurl)
print(binurl) # http://downloads.dell.com/FOLDER06808437M/1/7760%2520AIO-WIN10-A11-5VNTG.CAB

您可以通过以需要转义的形式提供URL来平衡这个问题,在这种情况下是

import wget
wget.download("http://downloads.dell.com/FOLDER06808437M/1/7760 AIO-WIN10-A11-5VNTG.CAB")

xor使用urllib.request.urlretrieve,最基本的形式是

import urllib.request
urllib.request.urlretrieve("http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB", "776 AIO-WIN10-A11-5VNTG.CAB")

其中参数是URL和文件名。请记住,使用这种方式时没有进度指示器(栏(,因此您需要等待下载完成。

最新更新