日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代理自动配置文件PAC的使用方法

發布時間:2024/3/12 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代理自动配置文件PAC的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注意:

? ? ? ? ?1、微軟從Internet Explorer(IE)11版本開始,已經棄用本地PAC文件的方式(也就是我們說的“file://”方式)配置自動代理了,只能通過http或者https方式加載代理自動配置的PAC文件

? ? ? ? ?2、 Chrome移除對file://和data:協議的支持,目前只能使用http://協議

? ? ? ? ?3、手動配置中的例外允許的大小為2068個字符,為查到此限制的文檔,2068為實際驗證的值,如下:

?

? ? ? ? ? ? ? ?

我通常上網使用兩個瀏覽器,safari用于一般上網;Chrome安裝SwitchyOmega插件,在不同的代理中切換,來保證某些網站的上網速度。
但是這種方式到了手機上就有點懵,幾乎所有的iPhone瀏覽器都不支持代理的自動切換和設置,所以只能選一個相對兼容性比較好的網絡方式一直用下去。很不爽利。。。
后來發現代理自動配置文件PAC是個好東西,跟SwitchyOmega類似,能夠比較智能的切換所需,所以給大家推薦一下。

通常設備上網的設置,都有3個選項,1是直接連接,不使用代理;2是自行設置http代理;3是使用代理自動配置文件URL。
這個URL指向的就需要是一個PAC文件。如果在電腦上,可以是file:///這種形式指向本地的文件。如果是手機上,則只能放到一個可以http訪問的服務器上。
PAC文件本質是js的一個子集,其中必須實現一個函數:

function FindProxyForURL(url, host)

兩個參數,url是將要訪問的網絡地址,host是從url中分離出來的主機名。
每次瀏覽器訪問任何一個網址的時候,都會調用這個腳本,根據腳本的返回值,選擇瀏覽器使用哪個代理來訪問互聯網。
FindProxyForURL函數返回的訪問方式,可以支持三種:

DIRECT直接訪問,不適用任何代理 PROXY host:port設置http代理,host是代理主機,port是代理端口 SOCKS host:port使用SOCKS代理模式,后面是主機及端口號

這三種方式,前兩種是所有瀏覽器都支持的。第三種SOCKS,有的瀏覽器會解釋為SOCKS5,有的瀏覽器會解釋為SOCKS4,還有的瀏覽器還另外提供了SOCKS5方式。在mac Safari瀏覽器上及iPhone中是將SOCKS解釋為SOCKS5協議。

對于PAC所使用的js語言的語法,不同瀏覽器的支持也不一樣。IE支持完整的js語法,甚至alert命令彈出窗口都支持。Safari則嚴格遵循PAC的規范,僅支持簡單局部變量的賦值和if語句及return語句。
所以通常安全起見,如果你的PAC文件會用在很多場合,最好考慮兼容性然后再編寫。
PAC所支持的函數并非通常瀏覽器中的函數,詳細內容可以參考這個網址。

具體PAC腳本的編寫方法我們參考完成的腳本來解釋:

function FindProxyForURL(url, host) {url = url.toLowerCase();host = host.toLowerCase();if (shExpMatch(url,"*twitter*") ||shExpMatch(url,"*facebook*") ||shExpMatch(url,"*fb*") ||shExpMatch(url,"*messenger*")) {return "PROXY 192.168.1.1:8080; DIRECT";};if (shExpMatch(url,"*youtube*") ||shExpMatch(url,"*google*")){return "PROXY 192.168.1.2:8080; DIRECT";};if (shExpMatch(url,"*wikipedia*") ||shExpMatch(url,"*blogspot*") ||){return "PROXY 192.168.1.3:8080; DIRECT";}return "DIRECT"; }

shExpMatch是PAC專用的函數之一,判斷url中是否包含某個網址,"*"是通配符的意思,表示url兩端可以有任意字符,只要中間部位匹配成功即可。3組條件各自返回一個代理,都不能匹配,使用DIRECT直連。
PROXY 192.168.1.1:8080; DIRECT是用分號隔開的兩個代理模式,如果前面的代理協議本瀏覽器不支持的話,使用后面的協議。
所以類似SOCKS的協議,可以寫成:

SOCKS5 192.168.1.1:8081; SOCKS 192.168.1.1:8082; DIRECT

這表示如果瀏覽器支持SOCKS5命令,則使用第一個協議;如果不支持SOCKS5命令,使用第二個SOCKS協議,實際在iPhone這就代表SOCKS5;前面兩個都不支持,則DIRECT。
PAC中支持的函數有好幾個,另外兩個可能常用到的是:isInNet和dnsResolve,來看一個例子:

if (isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))){return "DIRECT"}

剛才說過了,host是自url中分離出來的主機網址,首先使用dns解析為IP地址,然后判斷是否屬于給定的網段。如果是,則返回直連,表示這個網段不通過代理來訪問。
上面舉例的PAC完整文件的例子,是我使用的PAC文件,其中使用了相反的邏輯。是某幾個網站則使用相應代理,否則全部直連。所以沒有使用isInNet和dnsResolve函數。但很多人習慣的時候還是會用到。

使用這種方式后,在iPhone可以愉快的上網,當然仍然有些情況沒辦法解決。比如facebook app,并沒有使用http/https類的協議,而是直接使用tcp/ssl的鏈接獲取數據。這種情況下設置代理和使用PAC都是無效的,目前沒有什么好辦法。著急的時候可以使用手機瀏覽器訪問https://m.facebook.com來對付對付,體驗方面,肯定差多了。

參考資料:
https://zhiwei.li/text/2015/08/16/用代理自動配置文件pac給iphone和ipad設備添加socks代理/

總結

以上是生活随笔為你收集整理的代理自动配置文件PAC的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。