让Emacs通过Socks代理访问HTTPS
问题描述:
这个问题让我疯狂。我有一个本地SOCKSv5代理,它是系统上所有应用程序的网关。我想通过SOCKS使url-retrieve-synchronously
去。使用以下设置:让Emacs通过Socks代理访问HTTPS
(setq socks-noproxy '("127.0.0.1"))
(setq socks-server '("Default server" "127.0.0.1" 8010 5))
(setq url-gateway-method 'socks)
检索通过纯HTTP工程确定:
(url-retrieve-synchronously "http://gnu.org")
#<buffer *http www.gnu.org:80*>
但它不为HTTPS工作:
(url-retrieve-synchronously "https://gnu.org")
它会导致:
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$
问题:如何使HTTPS在Emacs中的袜子上工作?我的版本是24.2.50/W32
据我所知,原因open-network-stream
被用来代替socks-open-network-stream
。我试图使用edebug断点url-open-stream
,但没有设法理解为什么断点没有被触发。有任何想法吗?
谢谢。
答
GamerH2o - 我从来没有
proxychains emacs &
工作。对于我来说,我需要做的
proxychains bash-script.sh &
其中bash-script.sh是一个脚本
#!/bin/bash
/path/to/emacs --debug-init --geometry 83X40 --no-splash & ;;
exit 0
这将启动emacs的。我的实际脚本比上面更复杂一点,因为我包含了各种选项,但这是一般想法。我现在可以使用w3m或eww作为“emacs internet-browsers”。我通过dns服务器的过程在xterm中回显。 (我使用Tor而不是 “免费匿名服务器”。)
答
创建〜/ .emacs.d/w3m.sh:
#!/bin/bash
proxychains /usr/bin/w3m "[email protected]"
定制的w3m:
(setq w3m-command "~/.emacs.d/w3m.sh")
那么只有w3m使用代理。
我已经跟踪了这个问题。 Emacs肯定存在一个错误。有一个宏'url-https-create-secure-wrapper',它通过'url-http'函数创建一个包装器。在包装器中,'url-gateway-method'的值被'tls'值覆盖。这会导致跳过使用SOCKS并使用直接网关进行连接。目前我不知道如何破解/解决问题。 – zweibaranov
重新定义'url-https-create-secure-wrapper'? – Squidly
不行;至少凭借我对ELisp的了解。如果我重新定义'url-https-create-secure-wrapper',连接将通过SOCKS,但使用纯HTTP协商而不是HTTPS。包装应该使用SOCKS代理作为主要网络流,但HTTPS。 – zweibaranov