前言
作為程序員平時主要是使用 shadowsocks
作為代理工具的。shadowsocks
有個很明顯的優點兒就是可以設置白名單和黑名單。白名單是會走shadowsocks
的自動代理模式。
遇到的問題:
shadowsocks
代理是分白名單和黑名單的。當我訪問某個網站,而恰好這個網站的域名和靜態文件域名都在白名單里,訪問這個網站的http
請求就會自動走代理模式;
如果訪問某個網站的域名沒有在白名單里,就需要手動設置 全局代理模式 ;這有一個缺點就是電腦的所有的網絡訪問都會走代理,如果這個時候訪問國內的網站,就會很慢或者是打不開。
最好的辦法就是編輯shadowsocks
的.ShadowsocksX/gfwlist.js
文件。將沒辦法走自動代理模式的域名添加到這個文件里面。但是一個網站的在顯示完全,需要訪問的域名不止一個,那么手動添加就會很麻煩。那么可不可以使用程序來實現呢?
需求分析:
-
將網站的所有請求訪問的域名分類導出;
-
可以導出為
.txt
的文件,也可以直接打印在控制台;
怎么將所有的網絡請求導出
1.打開chrome
的開發者模式,並且將shadowsocks
設置為全局代理模式訪問自動代理模式無法訪問的網站;
2.在chrome的network面板,右鍵導出 har
文件,保存到自己想要的位置;
如下圖:
程序怎么運行:
按照提示運行程序:
運行效果展示:
代碼分析:
因為 har
文件的內容就是一個json
格式文件。所以就是讀取文件的內容,並且將文件內容轉化為json
,將所有的請求的url分類寫入一個數組,最后選擇方式輸出;
python主要代碼如下:
with open(filePath, 'r') as readObj: harDirct = json.loads(readObj.read()) requestList = harDirct['log']['entries'] for item in requestList: urlString = (item['request']['url']) start = urlString.index('://') tempStr = urlString[start + 3:] end = tempStr.index('/') resultStr = tempStr[:end] # 判斷是否是www開頭的域名 if 'www' in resultStr: resultStr = resultStr[4:] if resultStr not in hostList: hostList.append(resultStr) if str(outputType) is '1': with open(outputPath, 'w') as ff: for item in hostList: ff.write('"' + item + '",' + '\n') else: print '=============host start==============' for item in hostList: print '"' + item + '",' print '=============host end================'