我正在尝试使用Fiddler2作为代理捕获一些本机Java应用程序HTTPS流量。为此,我遵循了this article on asjava.com。
这是我事实上所做的:
安装并配置Fiddler2作为代理:配置与我提到的文章中提到的相同。
导出fiddler证书并导入适当的JRE / JDK。我正在使用改编版的Eclipse进行开发,所以我看了 Windows - >偏好 - > Java - >已安装JRE ,检查路径并将其导入为:
keytool -import -alias fiddlercert -file C:\fiddlerRoot.cer -keystore "C:\Program Files (x86)\Java\jdk6\jre\lib\security\cacerts" -storepass changeit
在我考虑/测试代理设置的Java应用程序中,我写了一个方法:
public boolean getCookieForUser(String username, String passwd, String system) {
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "8888");
HttpPost httpost = new HttpPost(system + ":443/irj/portal");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("j_user", username));
nvps.add(new BasicNameValuePair("j_password", passwd));
nvps.add(new BasicNameValuePair("j_authscheme", "default"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));
HttpResponse response = httpclient.execute(httpost);
HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
for(Cookie cookie:httpclient.getCookieStore().getCookies()){
if(cookie.getName().equalsIgnoreCase("MYSAPSSO2")){
ApplicationStateController.get()
.setSessionCoockie(cookie.getValue());
httpclient.getConnectionManager().shutdown();
return getMandantForUser(username, passwd, system);
}
}
} finally {
httpclient.getConnectionManager().shutdown();
}
} catch (Throwable e) {
e.printStackTrace();
return false;
}
return false;
}
然后我从Eclipse启动Java应用程序并尝试登录(运行方法getCookieForUser
)。这很好用,登录工作。实际上,Fiddler没有显示登录请求,我什么都没看到。
可能出现什么问题?我错过了什么吗?