如何像这样通过“Http-proxy”使用“apt-get”?

我正在尝试在使用代理的网络上使用apt-get命令,像这样:
我们使用10.114.7.7端口80作为Http代理,随后出现一个身份验证窗口,要求输入用户名和密码。
我们的用户名/域名是这样的:username@urmia.ac.ir 我想知道,在这种情况下,如何使用http_proxy=http://User:Pass@Proxyserver:Port !? 我还尝试过使用10.114.7.7和urmia.ac.ir作为代理服务器,但没有结果!
3个回答

要通过代理使用apt-get,可以在/etc/apt/apt.conf.d/目录下创建一个名为proxy或者其他你能识别的文件,或者(如果不存在)创建/etc/apt/apt.conf文件并插入以下行:
Acquire::http::Proxy "http://username:password@proxy.server:port/";

只需用您的登录详细信息替换用户名和密码,并将proxy.server:port替换为正确的地址(在您的情况下,为10.114.7.7:80),这样您的行将变成类似于以下内容:
Acquire::http::Proxy "http://username:password@10.114.7.7:80";

如果您的用户名中需要使用符号@,您将需要用反斜杠进行转义(username@urmia.ac.ir)。
通过使用反斜杠进行转义字符是无效的(例如,在exportwget中的\@),但可以使用URL编码来转义特殊字符。例如,username:my@pass@server.com:port 可以变成 username:my%40pass@server.com:port。请参考此URL编码字符列表获取更多信息。

1提议的解决方案是在 /etc/apt 中添加代理条目,这对我有效,但是请注意,如果你的代理服务器缓存凭据,你可以通过在不同进程中(例如在 Windows 中的 web 浏览器)通过代理服务器进行身份验证,而无需将凭据嵌入到配置文件中,然后再在 bash shell 中运行 apt 命令。通过这样做,我可以在 /etc/apt 中指定代理条目为 "http://server:port",而不是 "http://username:password@server:port"。 - Peter Sanza
附言:不要忘记那个分号;(别像我这么傻)。 - ch271828n

这应该解决你的问题:
export http_proxy=http://username:password@10.114.7.7:80/

在Bash中运行EXPORT HTTP_proxy=http://username:password@10.114.7.7:80/会导致出现EXPORT: command not found的错误提示。 - David Foerster
1无论是导出还是http都要小写。Bash是区分大小写的。否则它应该可以工作。至少对我来说已经工作了两年。 - s3lph
9适用于curl,但不适用于apt。 - FGM
2对我来说,apt-get 这样使用是有效的。注意,它需要使用 "http_proxy" 而不是 "HTTP_PROXY"。有些程序两者都接受,但 apt-get 似乎只接受前者。 - Moritz

或者,您可以将以下内容放置在/etc/apt/apt.conf中。
Acquire::http::Proxy "http://proxy.server.port:8080";

8080是端口号,我认为它是标准的。
不要忘记引号或分号结尾。