Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python 解析har 文件将域名分类导出 #16

Open
zhiqiang21 opened this issue Jul 17, 2016 · 0 comments
Open

Python 解析har 文件将域名分类导出 #16

zhiqiang21 opened this issue Jul 17, 2016 · 0 comments
Labels

Comments

@zhiqiang21
Copy link
Owner

前言

作为程序员平时主要是使用 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================'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant