简述Java中Http/Https请求监听方法

一、工欲善其事必先利其器

做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦。本文将采用Fiddler2作为分析工具,Fiddler很强大,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,是越墙抓包之利器。关于工具的介绍可以参考下面的链接:

http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html

工具的界面如下(拷贝了上面链接的图,大笑):

简述Java中Http/Https请求监听方法_第1张图片

这里我想说要注意以下几点:

1、工具的原理实际是启动的时候为你开启了一个代理(端口是8888,默认的),关闭的时候会取消这个代理设置。如下图所示,然后所有的请求都会首先通过这个代理(localhost除外),所以它支持多种浏览器。

简述Java中Http/Https请求监听方法_第2张图片

2、默认情况下是没有开启Https请求监听的,所以得手动开启,勾选下面的红色框框里面的东西,注意那段红色的文字哦

简述Java中Http/Https请求监听方法_第3张图片

二、浏览器请求的监听方法

经过上面的配置,浏览器发送的Internet请求不管是http还是https都可以监听了。但是有一个例外,就是你自己电脑上的站点(localhost和127.0.0.1)还是监听不到,因为Fiddler默认忽略来自这两个地址的请求,解决的方法如下:

1、用 http://localhost. (locahost紧跟一个点号)
2、用 http://127.0.0.1. (127.0.0.1紧跟一个点号)
3、用 http://machinename (机器名)

三、Java后台工程Http和Http请求的监听方法

1、后台工程的Http请求

在默认情况下,Fiddler不能监听Java HttpURLConnection请求。究其原因,Java的网络通信协议栈可能与浏览器的通信协议栈略有区别,Fiddler监听Http请求的原理是在应用程序和操作系统网络通信层之间搭建了一个代理服务器,而Java的HttpURLConnection应该是绕过了这个代理服务器,因此Fiddler无法监听到Java HttpURLConnection请求。解决方法就是给java环境设置一个代理指向Fiddler,其方法有两种:

一是设置JVM的启动参数,MyApp是你的应用名

java -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp

二是设置环境属性

System.setProperty("http.proxyHost", "localhost"); 
System.setProperty("http.proxyPort", "8888"); 
System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "8888");

2、后台工程的Https请求

这个就比较繁琐了,整了好久才弄明白,最主要的困难就是Https证书问题,相关的知识可以参考下面的链接:http://www.cnblogs.com/devinzhang/archive/2012/02/28/2371631.html

我们知道SDK要发送Https请求就必须先注册该站点的证书到jre中,注册的方法如下:简述Java中Http/Https请求监听方法_第4张图片

其中keytool位于java jdk的 bin目录下。

要想监听后台Https请求,必须要注册两个证书,一个是该Https站点的证书,还有一个是Fiddler自己的证书。应该还记得上面第一张截图那段红色的文字吧?没错,点击那个按钮导出证书到桌面。在注册完成Https站点的证书后,再注册Fiddler的证书。然后仿照上面的方法注册证书,下面是我的机器的注册代码

C:\Users\Administrator>D:\bingoeclipse4.3win64\jdk\bin\keytool.exe -import -file
C:\Users\Administrator\Desktop\FiddlerRoot.cer -keystore FiddlerKeystore -alias
Fiddler

请记得一定要注册两个证书,否则会报证书不存在错误。

经过以上的证书注册,我们应该能实现监听Https请求了,但是还有一个问题,那就是前面多次提到的Fiddler会忽略localhost的请求,所以我们还是要配置一个代理指向Fiddler,在JVM的启动参数的地方配置如下信息:

简述Java中Http/Https请求监听方法_第5张图片

我用的是Intell IDEA编辑器,Eclipse只是配置的地方不同而已,个人感觉IDEA比较好用,智能提示很强。

经过以上的配置和注册处理,现在运行起来应该能监听Https的请求了,效果图如下。

简述Java中Http/Https请求监听方法_第6张图片

 

现在老板再也不用担心我的请求了,哪里不会点哪里……

你可能感兴趣的:(https)