Java网络代理功能
作者:网络转载 发布时间:[ 2017/3/10 11:19:48 ] 推荐标签:测试开发技术 Java 网络代理功能
/**
* 从HttpURLConnection对象读取指定字符,如果不匹配则抛出异常
*
* @param connection
* @throws Exception
*/
private static void checkConnectionContent(HttpURLConnection connection) throws Exception {
try (InputStream inputStream = connection.getInputStream()) {
byte[] b = new byte[1024];
boolean success = false;
StringBuffer sb = new StringBuffer();
for (int i = inputStream.read(b); i > 0; i = inputStream.read(b)) {
String tempStr = new String(b, 0, i);
sb.append(tempStr);
if (tempStr.indexOf("3,file not found") >= 0) {// service固定返回这个字符串,如果service作了更改此处也应更改
success = true;
break;
}
}
if (!success) {
String str = sb.toString();
if (str.length() > 3) {
char char0 = str.charAt(0);
char char1 = str.charAt(1);
if (Utils.isNumber(char0 + "") && char1 == ',') {
success = true;
}
}
}
if (!success) {
throw new RuntimeException("result content does not meet expectations.");
}
} catch (Exception ex) {
throw ex;
}
}
/**
* 测试文件下载接口9067端口
*
* @param networkBean
* @throws Exception
*/
public static void testURLConnection() throws Exception {
HttpURLConnection connection = (HttpURLConnection) new URL(GeneralWebServiceAddress.FILE_DOWN_URL_ADD + "path=").openConnection();
checkConnectionContent(connection);
}
/**
* 测试代理服务器连接
*/
private void testProxyConnection() {
NetworkBean readNetworkBean = NetworkProxyTool.readNetworkBean();// 先获得正在使用的NetworkBean
try {
NetworkBean networkBean = createNetworkBean();// 根据用户填写的信息创建的NetworkBean对象
showTestResultDialog(NetworkProxyTool.testNetworkProxyBySystem(networkBean));
} catch (Exception ex) {
showTestResultDialog(false);
}
NetworkProxyTool.setNetworkProxyBySystem(readNetworkBean);// 测试结束,还原原来的NetworkBean
}
5.因为java连接网络时,如果使用当前的代理连接失败,那么会使用操作系统中缓存的代理进行网络连接,如何是测试连接时不使用操作系统缓存,但测试结束后使用操作系统缓存。
/**
* 设置长连接和验证信息缓存是否开启
*
* @param keepAlive
*/
public static void setKeepAliveAndAuthCache(boolean keepAlive) {
System.setProperty("http.keepAlive", keepAlive + "");// 设置是否开始长连接,如果为false可以防止连接被缓存(如果连接被缓存,用户名密码等所有信息都会被缓存)
if (keepAlive) {
AuthCacheValue.setAuthCache(new AuthCacheImpl());
} else {
// 设置一个空的实现AuthCache可以防止用户名密码信息被缓存
AuthCacheValue.setAuthCache(new AuthCache() {
public void remove(String pkey, AuthCacheValue entry) {
}
public void put(String pkey, AuthCacheValue value) {
}
public AuthCacheValue get(String pkey, String skey) {
return null;
}
});
}
}
在登录之前:
NetworkProxyTool.setKeepAliveAndAuthCache(false);
new.Login();
登录成功后:
NetworkProxyTool.setKeepAliveAndAuthCache(true);
6.保存用户的代理配置:
因为直接序列化自定义类型的对象,会存在版本问题(比如这个类的包名、类名改了,死定了)。
所以不能直接序列化自定义类的对象,二是将自定义类对象的属性转成字典(Map),然后序列化map。
/**
* 读取本地网络代理设置配置文件
*
* @return
*/
public static NetworkBean readNetworkBean() {
NetworkBean networkBean = getCurrNetworkBean(readNetworkBeanMap());
if (networkBean == null) {
networkBean = new NetworkBean();
networkBean.setType(Proxy.Type.DIRECT);
}
return networkBean;
}
/**
* 获取用户上次选择网络代理设置
*
* @param map
* @return
*/
public static NetworkBean getCurrNetworkBean(Map map) {
putBrowserProxy(map);
return (NetworkBean) map.get(getTypeMapKey(map));
}
/**
* 将浏览器的信息存放入代理信息总配置map
*
* @param map
*/
private static void putBrowserProxy(Map map) {
if (browserProxyBean == null) {
browserProxyBean = getBrowserProxy();
}
NetworkBean networkBeanBrowser = (NetworkBean) map.get(key_browser);
if (networkBeanBrowser == null) {
networkBeanBrowser = browserProxyBean;
}
if ((Utils.toString(browserProxyBean.getAddress()).isEmpty() || !browserProxyBean.getAddress().equals(networkBeanBrowser.getAddress()))
|| (Utils.toString(browserProxyBean.getPort()).isEmpty() || !browserProxyBean.getPort().equals(networkBeanBrowser.getPort()))) {
networkBeanBrowser.setUsername(null);
networkBeanBrowser.setPassword(null);
networkBeanBrowser.setDomain(null);
}
networkBeanBrowser.setType(browserProxyBean.getType());
networkBeanBrowser.setTypeText(browserProxyBean.getTypeText());
networkBeanBrowser.setAddress(browserProxyBean.getAddress());
networkBeanBrowser.setPort(browserProxyBean.getPort());
map.put(key_browser, networkBeanBrowser);
}
在登录之前:
NetworkBean networkBean = NetworkProxyTool.readNetworkBean();
NetworkProxyTool.setNetworkProxyBySystem(networkBean);
NetworkProxyTool.setKeepAliveAndAuthCache(false);
new.Login();
在用户配置完代理点击确定时:
/**
* 点击确定
*/
private void confirm() {
if ((isHttp() || isSocks()) && !checkIpAndPortNotNull()) {
return;
}
NetworkBean networkBean = createNetworkBean();
if (isHttp()) {// HTTP代理
if (networkBean.getDomain() != null) {
networkBean.setDomain(networkBean.getDomain().trim());
}
proxySettingMap.put(key_http, networkBean);
proxySettingMap.put(key_proxy_type, key_http);
} else if (isSocks()) {// SOCKS代理
proxySettingMap.put(key_socks, networkBean);
proxySettingMap.put(key_proxy_type, key_socks);
} else if (isBrowser()) {
proxySettingMap.put(key_browser, networkBean);
proxySettingMap.put(key_proxy_type, key_browser);
} else {
proxySettingMap.put(key_direct, networkBean);
proxySettingMap.put(key_proxy_type, key_direct);
}
userCurrShowNetworkBean = networkBean;
isConfirm = true;
setVisible(false);
NetworkProxyTool.saveNetworkProxyConfig(proxySettingMap);
}
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南