我正在尝试在 Windows 7 中使用 youtube-dl,使用下面的命令。
youtube-dl.exe --proxy "http://a12345:A@[email protected]:8080/" https://www.youtube.com/watch?v=XzZJuEDQ1a0
用户名:a12345
密码:A@1
代理:proxy.com
以下是我收到的回复。
[youtube] Confirming age WARNING: Unable to confirm age: <urlopen error [Errno 10013] An attempt was made to access a socket in a way forbidden by its access permissions> [youtube] XzZJuEDQ1a0: Downloading webpage ERROR: Unable to download webpage: <urlopen error [Errno 10013] An attempt was m ade to access a socket in a way forbidden by its access permissions> (caused by URLError(error(10013, 'An attempt was made to access a socket in a way forbidden by its access permissions'),))
我怀疑它是密码中的 @ 符号,但我似乎无法逃脱它被视为普通字符。
详细
[debug] 系统配置:[] [debug] 用户配置:[] [debug] 命令行
参数:['--proxy','http://a12345:A%[电子邮件保护]:8080/',
‘https://www.youtube.com/watch?v=2bZd5r0iPGc', '--verbose'] [调试]
编码:locale cp1252、fs mbcs、out cp437、pref cp1252 [调试]
youtube-dl 版本 2014.11.27 [调试] Python 版本 2.7.8 -
Windows-7-6.1.7601-SP1 [调试] exe 版本:ffmpeg N-68102-,ffprobe N-68102- [调试] 代理图:{u'http':'http://a12345:A%[电子邮件保护]:8080/', u'https':
‘http://a12345:A%[电子邮件保护]:8080/'} [youtube] 确认年龄
警告:无法确认年龄:
尝试以访问方式被禁止的方式访问套接字
权限> [youtube] 2bZd5r0iPGc:下载网页错误:无法
下载网页:
以访问权限禁止的方式访问套接字>
(由 URLError(error(10013, '试图访问
以访问权限所禁止的方式访问套接字'),))
文件“youtube_dl\extractor\common.pyo”,第 273 行,位于 _request_webpage
文件“youtube_dl\YoutubeDL.pyo”,第 1321 行,在 urlopen 中
文件“urllib2.pyo”,第 404 行,在 open > 文件“urllib2.pyo”,第 422 行,在 _open 中
文件“urllib2.pyo”,第 382 行,在 _call_chain 中
文件“youtube_dl\utils.pyo”,第 410 行,在 https_open 中 文件“urllib2.pyo”,第 1184 行,在 do_open 中
答案1
您应该按照 URI 标准对@
密码中的字符进行编码:%40
http://a12345:A%[email protected]:8080/
由于您报告此操作在 youtube-dl 中不起作用,我认为唯一的解决方法是避免在密码中使用 URI 特殊字符。ALPHA / DIGIT / "-" / "." / "_" / "~"
如果可以,请更改密码以包含这些字符。
我不确定问题出在哪里,因为 urllib2 在将密码传递给代理之前取消了对密码的引用:
if '@' in host:
user_pass, host = host.split('@', 1)
user_pass = base64.encodestring(unquote(user_pass)).strip()
req.add_header('Proxy-Authorization', 'Basic '+user_pass)
并按预期urllib2.unquote("A%401")
返回。也许你应该向 youtube-dl 开发人员报告此问题。A@1
答案2
如果您使用应用程序级防火墙,请检查 Youtube-dl 是否被防火墙阻止。由于它没有数字签名,某些防火墙可能会默认阻止它
显示为文件系统访问问题的错误与它是从 unix 移植的应用程序有关,其中网络访问可能表示为文件(我假设您没有对文件系统权限进行任何更改)
看https://unix.stackexchange.com/questions/157351/why-are-tcp-ip-sockets-considered-open-files