我是一名程序员,目前跨越.net和Java之间的界限,但我更倾向于.net,对java的实验有限。我有一个Java应用程序,不是由我自己开发的,它做一个httpClient执行(get)(得到一个HttpsFactory)从asp经典代码获取响应,该代码存在于通过特定URL查找到的不同代码服务器上,并带有查询字符串存储用户认证信息。不要问我为什么。
我们的qa团队正在测试的一个用户没有返回一个好的响应,因此我试图使用fiddler来查看我们正在回来的内容。我可以看到它正在连接,因为如果我输入在asp端验证的格式错误的密码。它生成了正确的错误消息,我们将其恢复。提琴手没有发现任何这种情况。我看过小提琴手试图配置我的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;
}
感谢您的所有帮助,无论结果如何。
答案 0 :(得分:1)
试试这个:
HttpHost proxy = new HttpHost("localhost", 8888);
CloseableHttpClient client = HttpClients.custom().setProxy(proxy).build();
HttpGet get_request = new HttpGet(url);
HttpResponse r = client.execute(get_request);
String Document = EntityUtils.toString(r.getEntity())
答案 1 :(得分:0)
当这类事情失败或难以设置时,您可以在反向代理模式下设置Fiddler。
基本上,你要做的就是在你的java代码中,你的http会在你的本地盒子上找到一个带有特定端口的组成URL。然后在Fiddler中,您可以使用OnBeforeRequest方法中添加的简单Fiddler脚本,如下所示:
//PROXY to different server example
if(oSession.HostnameIs("http://localhost:8989/path/to/whatever/")){
oSession.hostname = "http://real/path/to/whatever/on/the/internet";
}
以下是有关如何在反向代理模式下设置Fiddler的更多信息:http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy
这将有效地完成同样的事情,并允许您查看所有流量。唯一的缺点是你必须暂时修改你的java代码来解决这个问题。这个方法也适用于任何平台java,.net,php等...因为你只是通过Fiddler强制你的应用程序网络请求然后重定向它。
我希望这很有帮助。