① 如果遇到会本地ip无法打开的网站,手动挂代理如果是短效的就比较麻烦,所以此次分享的是实现1分钟自动切换浏览器的代理,亦可实现指定域名使用代理
② SwitchyOmega 是一个可以对不同的网站分别使用不同的代理规则,实现的效果和PAC代理一致,但是给用户提供了更简单易用的交互界面,从而可以定制适用于自己的规则,更多介绍 https://www.jianshu.com/p/31b24ed5807c
③ 下载安装:https://www.chrome666.com/chrome-extension/proxy_switchyomega.html
④ 有四种情景模式如图:常用的是代理服务器的模式,输入ip和port即可,由于代理服务器模式手动的填写代理ip比较麻烦,本次介绍的是PAC的情景模式,PAC的模式可以通过脚本文件自动切换代理ip,也可通过自动切换的模式选择性的对指定域名网站挂代理模式;这里的思路主要参考于https://www.nuomiphp.com/t/61cb4b3b2255a22c5b2a4972.html
① PAC(proxy auto config)文件是纯文本文件,以.pac后缀,其实质为javascript脚本,只是为了指定一个特定的程序来解析;更多详细介绍参考文档https://www.it610.com/article/1278043702526230528.htm
② PAC文件中必须包含一个函数,FindProxyForURL(url, host);其中的url是用户输入的url,参数host是url中的主机名,最基本的代码结构如下
function FindProxyForURL(url, host)
{
return "DIRECT";
}
③ 它的返回类型有三种,return 可以返回单种类型的
DIRECT 代表直接连网
PROXY 123.12.12.12:1221
SOCKS5 123.12.12.12:1221
function FindProxyForURL(url, host){
return "DIRECT";
}
function FindProxyForURL(url, host) {
return "PROXY 192.168.1.1:1121";
}
function FindProxyForURL(url, host) {
return "SOCKS5 192.168.1.1:1121";
}
④ 也可以返回多种类型的,如下脚本的意思是,优先选择对所有URL都直接连,如果不能连接走HTTP连接,如果还是不能连接走SOCKS5连接
function FindProxyForURL(url, host) {
return "DIRECT; PROXY 192.168.1.1:1121; SOCKS5 192.168.1.1:1121";
}
⑤ 同时还可以对请求参数的url或者host进行过滤选择哪种类型连接
shExpMatch函数用来匹配url或者host
isInNet函数用来返回请求的host是否在指定的域内,isInNet的第二个参数必须是 IP,不能是主机名,因此需要把主机名转换成IP,比如"isInNet(host, dnsResolve(www.google.com), "255.255.255.0")"
function FindProxyForURL(url, host) {
if (shExpMatch(url, "*.google.com/*")) {
return "PROXY 192.168.1.1:3128";
} if (shExpMatch(url, "*.wikipedia.com:*/*")) {
return "SOCKS5 lilinux.net:1080";
}
if (isInNet(host, "10.0.0.0", "255.0.0.0")) {
return "DIRECT";
}
return "DIRECT; PROXY 192.168.1.1:3128; SOCKS5 lilinux.net:1080";
}
① 新建pac情景模式,pac文件, 并开启一个服务接口自动更新返回pac文件,每次自动更新时会主动调用服务切换代理
② 服务接口如下http://127.0.0.1:8000/proxy ,关于服务接口的代码在文档目录五,点击立即更新情景模式,则可实现pac文件返回,返回的pac文件内容如图中所示,最后点击应用选项则情景模式已创建成功
③ 设置1分钟自动切换代理,在通用这里选择更新间隔,最后点击应用选项使之生效,switchyomega默认是最低15分钟的间隔,所以我们可以对源码进行修改增加1分钟,5分钟的间隔,如何修改源码分钟在目录四有介绍
④ 如下选择创建好的pacc情景模式即可实现代理的切换
① 手机端在微信公众号后台回复proxy,然后点击链接选择发送给好友,然后在切换到电脑端打开链接即可下载已经改好的安装包,或者按下面的步骤自己修改也可以
② 下载好的插件后缀名.crx改成.zip,然后解压后改如下文件"Proxy_SwitchyOmega_2.5.21\js\omega.js" 里面添加两个数字
③ 并将各个的"Proxy_SwitchyOmega_2.5.21\_locales\messages.json"文件也做如下修改,新增1分钟和5分钟的选项"options_downloadInterval_1":{"message":"1分钟"},"options_downloadInterval_5":{"message":"5分钟"},
④ 然后打开谷歌浏览器,重新加载已经修改好的插件
④ 最终通用界面即可实现1分钟和5分钟的选项切换
① 如下是直接用fastapi写了个服务接口,新建了一个fastproxy.py文件,则对应启动命令为uvicorn fastproxy:app --reload --host 127.0.0.1 ;其中有个switch_mf_proxy(True)方法是获取代理的自我编写
# -*- coding: utf-8 -*-
# @Time: 2022/7/15
# @Author: Shirmay
# fastproxy.py
"""
1、安装pip
● pip install fastapi[all] -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
● http://127.0.0.1:8000/docs 是各个接口的可视化界面,可以看到各个接口的请求参数,点击try it out然后excute
2、在当前文件路径cmd窗口按如下启动服务,可以边在修改代码的时候服务自动响应
uvicorn fastproxy:app --reload --host 127.0.0.1
3、接着打开http://127.0.0.1:8000/proxy,正常返回数据就代表服务就启动好了
"""
import uvicorn
from fastapi import FastAPI
from fastapi.responses import FileResponse
from proxy import switch_mf_proxy
app = FastAPI()@app.get("/proxy")
def index():
proxy = switch_mf_proxy(True)
text = """function FindProxyForURL(url, host) {
return "PROXY %s"
}""" % proxy
with open('proxy.pac', "w", encoding='utf-8') as f:
f.write(text)
return FileResponse('proxy.pac')
if __name__ == '__main__':
uvicorn.run("fastproxy:app", host='127.0.0.1')
①https://www.jianshu.com/p/31b24ed5807c
②https://www.nuomiphp.com/t/61cb4b3b2255a22c5b2a4972.html
③https://www.it610.com/article/1278043702526230528.htm