Python 解析har 文件將域名分類導出


前言

作為程序員平時主要是使用 shadowsocks 作為代理工具的。shadowsocks 有個很明顯的優點兒就是可以設置白名單和黑名單。白名單是會走shadowsocks的自動代理模式。

遇到的問題:

shadowsocks 代理是分白名單和黑名單的。當我訪問某個網站,而恰好這個網站的域名和靜態文件域名都在白名單里,訪問這個網站的http請求就會自動走代理模式;

如果訪問某個網站的域名沒有在白名單里,就需要手動設置 全局代理模式 ;這有一個缺點就是電腦的所有的網絡訪問都會走代理,如果這個時候訪問國內的網站,就會很慢或者是打不開。

最好的辦法就是編輯shadowsocks.ShadowsocksX/gfwlist.js文件。將沒辦法走自動代理模式的域名添加到這個文件里面。但是一個網站的在顯示完全,需要訪問的域名不止一個,那么手動添加就會很麻煩。那么可不可以使用程序來實現呢?

需求分析:

  1. 將網站的所有請求訪問的域名分類導出;

  2. 可以導出為.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================' 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM