让 Emacs 通过 Socks 代理访问 HTTPS

zwe*_*nov 5 emacs proxy elisp socks

这个问题让我抓狂。我有一个本地 SOCKSv5 代理,它是系统上所有应用程序的网关。我想穿上url-retrieve-synchronously袜子。通过以下设置:

(setq socks-noproxy '("127.0.0.1"))
(setq socks-server '("Default server" "127.0.0.1" 8010 5))
(setq url-gateway-method 'socks)
Run Code Online (Sandbox Code Playgroud)

通过纯 HTTP 进行检索工作正常:

(url-retrieve-synchronously "http://gnu.org")
#<buffer  *http www.gnu.org:80*>
Run Code Online (Sandbox Code Playgroud)

但它不适用于HTTPS

(url-retrieve-synchronously "https://gnu.org")
Run Code Online (Sandbox Code Playgroud)

它会导致:

Debugger entered--Lisp error: (file-error "make client process failed" "connection timed out" :name "gnu.org" :buffer #<buffer  *url-http-temp*> :host "gnu.org" :service 443 :nowait nil)
  make-network-process(:name "gnu.org" :buffer #<buffer  *url-http-temp*> :host    "gnu.org" :service 443 :nowait nil)
  open-network-stream("gnu.org" #<buffer  *url-http-temp*> "gnu.org" 443)
  open-gnutls-stream("gnu.org" #<buffer  *url-http-temp*> "gnu.org" 443)
  network-stream-open-tls("gnu.org" #<buffer  *url-http-temp*> "gnu.org" 443 (:type tls :nowait nil))
  open-network-stream("gnu.org" #<buffer  *url-http-temp*> "gnu.org" 443 :type tls :nowait nil)
  byte-code("\306\211\n\307>\203$
Run Code Online (Sandbox Code Playgroud)

问题:如何在 Emacs 中使 HTTPS 通过袜子工作?我的版本是24.2.50/W32

据我所知,由于某种原因,open-network-stream使用了原件socks-open-network-stream。我尝试url-open-stream使用edebug断点,但无法理解为什么断点没有被触发。有任何想法吗?

谢谢。

Zha*_*ang 1

另一种方法是使用程序proxychains从命令行启动emacs,proxychains支持HTTPocks4和socks5代理协议。代码可能是:

proxychains emacs &

不用说,您必须在 proxychains 而不是 emacs 中配置代理设置。

PS:不要忘记在quiet_mode其配置文件(/etc/proxychains.conf)中设置代理链,否则详细的输出可能会让你烦恼。至少在 Fedora 上这不是默认设置。