【发布时间】:2013-08-02 16:16:14
【问题描述】:
我是一名程序员,目前跨界于 .net 和 Java 之间,但我更倾向于 .net,对 java 的经验有限。我有一个 Java 应用程序,不是我自己开发的,它执行 httpClient 执行(get)(get 是一个 HttpsFactory)以从 asp 经典代码中获取响应,该代码位于通过带有查询字符串的特定 url 找到的不同代码服务器上存储用户认证信息。不要问我为什么。
我们的 qa 团队正在测试的用户之一没有返回良好的响应,因此我正在尝试使用 fiddler 来查看我们得到了什么。我可以看到它正在连接,因为如果我输入了在 asp 端验证的格式错误的密码。它生成了正确的错误消息,我们将其取回。 Fiddler 没有检测到任何这些。我查看了提琴手视线,尝试将我的 jvm 配置为通过提琴手代理服务器。但我无法让它工作。我正在运行我认为是最新的 java 版本 1.7.0.21。
我在命令提示符下运行了以下命令
jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 和 jre -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp
并且 jre 无法识别。我也试过了:
java -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp 和 java -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
属性无法识别
我也试过了
java -Dhttp.proxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
我只是了解 java 命令的用法。
我还尝试在 http 连接之前将以下内容嵌入到我的代码中,但仍然没有检测到。
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyPort", "8888");
这是我正在运行的 java 代码。
public String getHttpConnect(User user) {
HttpClient client=https.getHttpClient();
InputStream instream=null;
HttpEntity entity=null;
HttpGet get = https.getHttp(user);
try {
response = client.execute(get);
entity = response.getEntity();
if (entity != null) {
instream = entity.getContent();
Document document= read.read(instream);
Element root = document.getRootElement();
String content = root.elementText("permission");
if (content.equals("OK")) {
message = Global.CONNECT_SUCCESS;
} else {
message = ErrorMsg.CONNECT_FAIL;
}
}
}catch (Exception e) {
message = ErrorMsg.CONNECT_EXCEPTION;
get.abort();
log.error("HttpConnect error: "+e.toString());
}finally{
try {
if(instream!=null)instream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Inputstream exception "+e.toString());
log.error("Inputstream close exception: "+e.toString());
e.printStackTrace();
message = ErrorMsg.CONNECT_EXCEPTION;
}
client.getConnectionManager().shutdown();
}
return message;
}
public HttpClient getHttpClient() {
HttpClient client = new DefaultHttpClient();
client = WebClientDevWrapper.wrapClient(client);
client.getParams().setParameter(
CoreConnectionPNames.CONNECTION_TIMEOUT,
Global.CONNECTION_TIMEOUT);// connect timeout
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
Global.RESPONSE_TIMEOUT);// send data read timeout
return client;
}
public HttpGet getHttp(User user) {
String psw = user.getAccountpsw();
StringBuffer connectUrl = new StringBuffer();
if (Global.CURRENT_RUN_TYPE.equals(Global.BETA)) {
connectUrl.append(Global.DEFAULT_LOGIN_URL_BETA);
} else {
connectUrl.append(Global.DEFAULT_LOGIN_URL_LIVE);
}
connectUrl.append("?usr=");
connectUrl.append(user.getAccountname());
connectUrl.append("&pwd=");
connectUrl.append(psw);
connectUrl.append("&vers=2.5.20&");
connectUrl.append(random());
// connectUrl.append("&SkipCheckForFiles=TRUE");
StringBuffer logConnect = new StringBuffer();
logConnect.append("Logging into server using URL:");
logConnect.append(Global.LOG_NEWLINE);
logConnect.append(Global.DES.getLogEncString(connectUrl.toString()));
logConnect.append(Global.LOG_NEWLINE);
log.info(logConnect);
HttpGet get = new HttpGet(connectUrl.toString());
return get;
}
感谢您的所有帮助,无论结果如何。
【问题讨论】:
-
1> 你用的是什么JVM?它是否有一个允许设置代理设置的控制面板小程序? 2> 你用的是什么网址?是 HTTPS 吗?如果是这样,您是否已将 Fiddler 配置为解密 HTTPS?您是否已将 Java 配置为信任 Fiddler 的根证书?你看过stackoverflow.com/questions/6780128/…
-
抱歉没有及时回复。我一直被其他错误跟踪。我正在使用具有 jdk7 的 glassfish4。我的 Eclipse 也设置为在 1.7 上运行。我不熟悉它是否有小程序控制面板或它在哪里。我尝试连接的 url 不是 https url。我将查看下面的代码和上面的链接。谢谢!
标签: java httprequest fiddler