背景:解决java http from 请求出了问题,需要监控请求查看一下,相关参数设置;我下载了fiddler5 来抓取包信息,发现无法抓取,经过百娘发现,fiddler5无法拦截到java 的请求;需要配置代理; fiddler5默认监控配置是8888端口,所以需要设置java代理;网上说修改java启动设置,我没有弄出来;所以我使用的是将代理放到请求里面,这样是通过代码设置代理;这样可以根据需要去设置请求代理。
相关的包)
核心代码:
HttpPost pos = new HttpPost(url+"?date="+(new Date().getTime()));
//端口 和 ip 可以根据需要自行修改,我这是抓包需要 设置为8888
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.setStaleConnectionCheckEnabled(true)
.build();
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
.setProxy(new HttpHost("127.0.0.1", 8888))
.build();
pos.setConfig(requestConfig);
我的代码:
CookieStore cookieStore = new BasicCookieStore();
//设置cookie
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", jsessionin);
cookie.setVersion(0);
cookie.setDomain("/"); //设置范围
cookie.setPath("/");
cookieStore.addCookie(cookie);
CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCookieStore(cookieStore).build();
log.debugger("判定为【中国证券投资基金业协会】使用httpclient-4.5 --------->>>>>");
//CloseableHttpClient httpclient = HttpClients.createDefault();
MultipartEntityBuilder reqEntity=MultipartEntityBuilder.create();
//设置模拟浏览器的上传格式
reqEntity.setMode(HttpMultipartMode.RFC6532);
//文件参数
if (file != null) {
for (Map.Entry<String, File> enetiy : file.entrySet()) {
log.debugger("添加参数文件域参数" + enetiy.getKey());
reqEntity.addBinaryBody(enetiy.getKey(), enetiy.getValue(),ContentType.DEFAULT_BINARY, enetiy.getValue().getName());
//reqEntity.addBinaryBody(enetiy.getKey(), new
//File("D:\\TOZQSBNAV20170801.txt"),ContentType.TEXT_PLAIN,"TOZQSBNAV20170801.txt");
//Content-Type: application/vnd.ms-excel
}
}
// 添加上传参数
if (param != null) {
for (Map.Entry<String, String> enetiy : param.entrySet()) {
log.debugger("添加上传普通参数" + enetiy.getKey() + "<---->" + enetiy.getValue());
reqEntity.addTextBody(enetiy.getKey(), enetiy.getValue());
}
}
//组装url
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(url+"?date=");
stringBuilder.append((new Date().getTime()));
log.debugger("组装的url:" + stringBuilder.toString());
//设置代理
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.setStaleConnectionCheckEnabled(true)
.build();
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
.setProxy(new HttpHost("127.0.0.1", 8888))
.build();
//pos.setConfig(requestConfig);
//设置发送请求参数
HttpUriRequest request = RequestBuilder.post(stringBuilder.toString()).setEntity(reqEntity.build()).setConfig(requestConfig).build();
System.out.println("请求参数 request: " + request.getRequestLine());
ResponseHandler<String> responseHandler = new BasicResponseHandler();
//执行请求
log.debugger("开始上传---------->>>>>" + stringBuilder.toString());
String responseBody = httpclient.execute(request, responseHandler);
log.debugger("执行完成---------->>>>>");
log.debugger("返回参数:"+responseBody);
return responseBody;