在实际开发过程中,我们可以使用抓包工具方便我们测试。
Fiddler教程:https://www.bilibili.com/video/BV1c4411c7zH?from=search&seid=3693351876556970940
在这里向大家介绍一款主流的抓包工具Fiddler ,Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。(代理相当于中介的意思,它可以监听到客户端与服务器之间的所有请求)
我们就是用这款软件抓取 ,我们手机app访问的所有资源路径。
下面 我们拿实例 来演示下,怎么用fiddler 抓取数据。
环境: win7
准备工作:
注意 wind7 wind8 下载不是一样的, 官网有详细介绍。自行安装。
或者直接网盘下载:
链接 : https://pan.baidu.com/s/1SHrwr30jh5TwuLVSbRjEgw
提取码: qex3
Fiddler左上角主菜单 Tools ->Options,
…-> HTTPS 选中"Decrpt HTTPS traffic"。 (Fiddler就可以截获HTTPS请求)
…-> Connections 选中Allow remote computers to connect。(允许别的机器把HTTP/HTTPS请求发送到Fiddler上来)
记住这个端口号为8888
保存后重启一下Fiddler。
首先获取PC的ip地址:cmd命令行中输入 ipconfig 获取 ip地址 (192.168.2.36)
其次要使手机和电脑在同一个无线网络,使用同一个局域网
打开手机设置…-> WLAN,长按连接的WIFI名,然后点击修改网络
选中显示高级选项按钮 …-> 代理选择手动 …-> 输入刚才的IP地址以及Fiddler默认的端口号 …-> 保存
现在我们就完成了代理的设置,就可以通过Fiddler抓取http数据包了!
在拿到的数据之后,我们右键 …-> Copy …-> Just Url ,就拿到我们抓的Url了,直接在浏览器打开查看就可以了!
PS:使用Fiddler 进行https 抓包 可以首先 用手机浏览器 访问本机ip:端口号 10.0.0.0:8888 下载证书,然后安装证书。
(1)打开手机浏览器,输入http:// IP: 端口号 (http://192.168.2.36:8888),点击前往;见下图:
(2)前往之后会跳转到证书下载页,见下图:
点击FiddlerRoot certificate下载证书;
(3)点击下载开始下载
(4)安装证书并起个名字,随便写就行,点击确定;
(5)要求设置一个手机密码,自己设置一个,记住密码就行,最后不用了去系统-安全-密码中去掉即可;
(6)打开Fiddler配置HTTPS,Tools -->Options -->HTTPS --> Actions --> Trust Root Certificate , 点击yes,安装
(如果不行的话,先点击如图箭头所指:Reset All Certificates ,然后执行上述操作)
点击是进行安装,这样就可以看到抓取到的HTTPS了
下边说一个证书认证时出现的问题
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.readTimeout(DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
builder.writeTimeout(DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
builder.connectTimeout(DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
builder.sslSocketFactory(createSSLSocketFactory());
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
mOkHttpClient = builder.build();
private static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory ssfFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());
ssfFactory = sc.getSocketFactory();
} catch (Exception e) {
}
return ssfFactory;
}
public class TrustAllCerts implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}