还有另一个问题可以回答这个问题,尽管它没有指定有关代理身份验证的任何内容。
它的解决方案是
(setq url-proxy-services '(("no_proxy" . "work\\.com")
("http" . "proxy.work.com:911")))
如今,我解决“经过身份验证的代理问题”的方法是使用CNTLM。它是可移植的,很容易配置并且可以作为守护进程运行。
我通过以下方式获得授权,无需用户交互:
(setq url-proxy-services
'(("no_proxy" . "^\\(localhost\\|10.*\\)")
("http" . "proxy.com:8080")
("https" . "proxy.com:8080")))
(setq url-http-proxy-basic-auth-storage
(list (list "proxy.com:8080"
(cons "Input your LDAP UID !"
(base64-encode-string "LOGIN:PASSWORD")))))
这适用于 Emacs 24.3。它基于非公共 API 技巧,因此可能不适用于其他 Emacs 版本......
用您的身份验证信息替换LOGIN
和PASSWORD
...
好吧,如果您真的想这样做并且不介意使用其他程序,那么... socat就是答案。使用 socat 将本地端口转发到通过 http 代理的连接。您并没有绕过它,只是将功能“绑定”到没有它的应用程序(以防有人问)。这可能很困难。
如果您使用的是 unixy 操作系统,另一个非常有用的解决方案是安装您自己的使用身份验证代理(如 squid)的非身份验证 http 代理。对某些人来说,这可能看起来像是规避。当心。
例如,看看Proxytunnel。
更新:Mike Hoss在他添加到上面链接的问题的评论中似乎是正确的。URL 包将要求输入 ID 和密码。至少这是我在文件 url-http.el 中的 url-http-create-request 的 defun 中看到的。
以防其他人遇到我刚刚遇到的问题:
如果您使用 cntlm 或其他一些本地身份验证代理,您可能需要指定环回 IP 地址而不是“localhost”。我发现“localhost”默默地失败了,但是“127.0.0.1”很有效。
ELPA 使用“url”包。据我所知,没有办法用它进行代理身份验证。
您可以在 Emacs 之外设置代理身份验证吗?