已经解决,感谢!步骤很详细,从你这了解了逻辑之后,我翻半人马的配置对照和实践,发现你的配置socks和http代理没分开 (defvar default-proxy "127.0.0.1:1080")
都是用了1080端口。我本地跑的v2的socks和http端口分别是1080和1087,所以就分开设置:
(Setq my-http-proxy "127.0.0.1:1087")
(Setq my-socks-proxy "127.0.0.1:1080")
已经解决,感谢!步骤很详细,从你这了解了逻辑之后,我翻半人马的配置对照和实践,发现你的配置socks和http代理没分开 (defvar default-proxy "127.0.0.1:1080")
都是用了1080端口。我本地跑的v2的socks和http端口分别是1080和1087,所以就分开设置:
(Setq my-http-proxy "127.0.0.1:1087")
(Setq my-socks-proxy "127.0.0.1:1080")
知道,我故意的呀一般我只会用其中一种,如果我需要修改使用socks的时候我会执行eval
设置一下端口就好了,很少会变端口的。除非梯子挂的厉害,不过用的机场,一年多基本上没变过。
正在拜读你的其他blog,每篇讲解都很详细,对我这种非it人员很友好,期待继续更新 另外,如果有空捣鼓的话,希望可以让proxy自动启动,当遇到package not found或make client process failed的时候触发proxy-http-enable,感觉有点难
hook一下应该就可以,不过,我更倾向手动启动,在镜像里的东西,还是直连快一些,一些需要代理的地方比如lsp之流,一般也就只需要安装一次。blog很久没更新了, 后面看情况吧,尽量把TODO List 写完,哈哈。
那也是,偶尔代理一下也没啥麻烦。加油加油,blog我先收藏了,等待更新
make-network-process
并不使用 process-environment
,而是使用 url-proxy-services
。
Emacs 发起的网络请求基于 make-network-process
没错,但如果设置了 url-proxy-services
,那么 make-network-process
则是创建与代理服务器的连接,通过代理服务器转发请求。
以下代码分别经由代理访问 google 和不经代理访问 baidu:
(let ((adfn (lambda (&rest args) (message "==> make-network-process:\n%S" args))))
(unwind-protect
(with-proxy
(advice-add 'make-network-process :before adfn)
(url-retrieve-synchronously "https://www.google.com"))
(advice-remove 'make-network-process adfn)))
;; ==> make-network-process:
;; (:name "www.google.com" :buffer #<buffer *url-http-temp*> :host "127.0.0.1"
;; :service 7890 :nowait (:nowait t) :tls-parameters nil :coding nil)
(let ((adfn (lambda (&rest args) (message "==> make-network-process:\n%S" args))))
(unwind-protect
(progn
(advice-add 'make-network-process :before adfn)
(url-retrieve-synchronously "https://www.baidu.com"))
(advice-remove 'make-network-process adfn)))
;; ==> make-network-process:
;; (:name "www.baidu.com" :buffer #<buffer *url-http-temp*> :host
;; "www.baidu.com" :service 443 :nowait nil :tls-parameters nil :coding nil)
可以了解一下《 with-proxy: 在局部范围内使用代理 》。
我也用了大佬你的with-proxy,eshell下git和从melpa安装pacakge都用上代理了,速度很快,但是安装all-the-icons-install-fonts的时候卡住了,连不上"https://raw.githubusercontent.com/"。可能是我配置问题
(use-package with-proxy
:hook (after-init-hook . with-proxy)
:config
(with-proxy
:http-server "127.0.0.1:1087"
:no-proxy '("localhost" "127.0.0.1" "192.168.*" "10.*")
"https://elpa.gnu.org/packages/"
"https://melpa.org/packages/"
"http://github.com"
"https://github.com"
"https://raw.githubusercontent.com/"))
你这几行不会出错吗?是想完成什么操作?
我不了解 use-package
,试试这样安装一个包:
(with-proxy
(use-package all-the-icons-install-fonts
...))
若想验证某个地址是否可以访问:
(with-proxy
(with-current-buffer (url-retrieve-synchronously "https://raw.githubusercontent.com/")
(url-http-parse-response)))
;; => 200
(with-proxy
(with-current-buffer (url-retrieve-synchronously "https://www.google.com")
(url-http-parse-response)))
;; => 200
这几行没报错啊 我以为像git代理那样git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
,直接填写url来让其使用代理
all-the-icons-install-fonts是这样安装:M-x all-the-icons-install-fonts
我在执行这一步的时候出现这样的错误:
open-network-stream: make client process failed: Connection refused, :name, raw.githubusercontent.com, :buffer, #<killed buffer>, :host, raw.githubusercontent.com, :service, 443, :nowait, nil, :tls-parameters, nil
引起这个错误的原因应该就是国内网络无法访问 raw.githubusercontent.com ,所以我想通过with-proxy对melpa和git等难以访问的网站进行代理
麻烦大佬指导一下!
(with-proxy
(call-interactively #'all-the-icons-install-fonts))
原来是这样子用,with-proxy的readme没有具体举例,对elisp小白来说真的搞不了
另外,还想请教一下,如何对指定网址进行设置呢?例如:
(with-proxy
(*这里写什么* "raw.githubusercontent.com"))
不明白你想表达什么。
Sorry 没表达清楚
我在执行M-x all-the-icons-install-fonts
的时候不能访问 raw.githubusercontent.com 这个网址。需要下面这样写配置才能解决。
(with-proxy
(call-interactively #'all-the-icons-install-fonts))
如果以后我装了其他的包,包运行后也是需要连接 raw.githubusercontent.com这个网址,那我就不知道该怎么写配置了。
请问:with-proxy怎么配置指定网址进行代理呢?这样不管a包、b包还是c包需要访问 raw.githubusercontent.com时都能顺利代理完成访问了。
with-proxy
不适合,你需要全局代理。
可惜了,那就只能用with-proxy来给eshell设置代理了。谢谢大佬耐心解答!
我前面说了:
所以全局代理不是我的选择,毕竟大部分时候不需要代理。当然可以启用全局代理,然后设置 no_proxy
白名单,不过我更想要的是与之相反的黑名单。
但我也不是每次都 (with-proxy (quelpa ...))
,而是给 quelpa 打了一个"补丁":
(defvar quelpa-domain-proxy-list
'("raw.githubusercontent.com" "github.com" github))
(defun quelpa@with-proxy (fn arg &rest plist)
(let ((recipe ...))
(if (or (plist-get recipe :proxy)
(memq (plist-get recipe :fetch) quelpa-domain-proxy-list)
(member (url/domain (plist-get recipe :url)) quelpa-domain-proxy-list)
...)
(with-proxy
(message "Proxy: t")
(apply fn arg plist))
(apply fn arg plist))))
(advice-add 'quelpa :around #'quelpa@with-proxy)
然后使用 quelpa 安装包的时候就可以自动按需使用代理了:
或许可以试试把补丁打到 url-retrive
函数上。
啊~我就是希望实现这样的功能。我也没搞邮箱 rss,目前在emacs里需要代理的就是安装melpa的包(刚看到国内镜像站出问题)和git 尴尬的是,我才选择了straight作为use-package/package.el的扩展
大佬有没有兴趣把with-proxy.el的功能扩展一下,方便在init-file里设置参数实现自定义需要代理的网站,例如:
(require 'with-proxy)
(with-proxy-url
:http-server "127.0.0.1:1087"
:no-proxy '("localhost" "127.0.0.1" "192.168.*" "10.*")
:url-proxy '("XXXX.com" "YYY.com"))
(with-proxy-shell
:http-server "127.0.0.1:1087")
对我这样抄作业的小白来说,多这一行::url-proxy '("XXXX.com" "YYY.com")
就比较直观易懂了,自己把需要代理的网址填上去即可 一开始我就以为是直接填写网址就能实现自动按需使用代理,想不到还要打补丁,太难了
今天才发现用request
包还得另外设置代理,网上查了查发现需要设置request-curl-options
选项。但是这个这个选项的内容应该怎么填注释说的也很模糊。网上找了一圈以后,反而是在论坛里面找到了相关信息。