Java tutorial
/* * soapUI, copyright (C) 2004-2011 eviware.com * * soapUI is free software; you can redistribute it and/or modify it under the * terms of version 2.1 of the GNU Lesser General Public License as published by * the Free Software Foundation. * * soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details at gnu.org. */ package com.eviware.soapui.impl.wsdl.support.http; import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; import java.net.UnknownHostException; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpState; import org.apache.commons.httpclient.NTCredentials; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import com.eviware.soapui.SoapUI; import com.eviware.soapui.model.propertyexpansion.PropertyExpander; import com.eviware.soapui.model.propertyexpansion.PropertyExpansionContext; import com.eviware.soapui.model.settings.Settings; import com.eviware.soapui.settings.ProxySettings; import com.eviware.soapui.support.StringUtils; /** * Utilities for setting proxy-servers correctly * * @author ole.matzura */ public class ProxyUtils { private static boolean proxyEnabled = SoapUI.getSettings().getBoolean(ProxySettings.ENABLE_PROXY); public static HostConfiguration initProxySettings(Settings settings, HttpState httpState, HostConfiguration hostConfiguration, String urlString, PropertyExpansionContext context) { boolean enabled = proxyEnabled; // check system properties first String proxyHost = System.getProperty("http.proxyHost"); String proxyPort = System.getProperty("http.proxyPort"); if (proxyHost == null && enabled) proxyHost = PropertyExpander.expandProperties(context, settings.getString(ProxySettings.HOST, "")); if (proxyPort == null && proxyHost != null && enabled) proxyPort = PropertyExpander.expandProperties(context, settings.getString(ProxySettings.PORT, "")); if (!StringUtils.isNullOrEmpty(proxyHost) && !StringUtils.isNullOrEmpty(proxyPort)) { // check excludes String[] excludes = PropertyExpander .expandProperties(context, settings.getString(ProxySettings.EXCLUDES, "")).split(","); try { URL url = new URL(urlString); if (!excludes(excludes, url.getHost(), url.getPort())) { hostConfiguration.setProxy(proxyHost, Integer.parseInt(proxyPort)); String proxyUsername = PropertyExpander.expandProperties(context, settings.getString(ProxySettings.USERNAME, null)); String proxyPassword = PropertyExpander.expandProperties(context, settings.getString(ProxySettings.PASSWORD, null)); if (proxyUsername != null && proxyPassword != null) { Credentials proxyCreds = new UsernamePasswordCredentials(proxyUsername, proxyPassword == null ? "" : proxyPassword); // check for nt-username int ix = proxyUsername.indexOf('\\'); if (ix > 0) { String domain = proxyUsername.substring(0, ix); if (proxyUsername.length() > ix + 1) { String user = proxyUsername.substring(ix + 1); proxyCreds = new NTCredentials(user, proxyPassword, proxyHost, domain); } } httpState.setProxyCredentials(AuthScope.ANY, proxyCreds); } } } catch (MalformedURLException e) { SoapUI.logError(e); } } return hostConfiguration; } public static boolean excludes(String[] excludes, String proxyHost, int proxyPort) { for (int c = 0; c < excludes.length; c++) { String exclude = excludes[c].trim(); if (exclude.length() == 0) continue; // check for port int ix = exclude.indexOf(':'); if (ix >= 0 && exclude.length() > ix + 1) { String excludePort = exclude.substring(ix + 1); if (proxyPort != -1 && excludePort.equals(String.valueOf(proxyPort))) { exclude = exclude.substring(0, ix); } else { continue; } } /* * This will exclude addresses with wildcard *, too. */ // if( proxyHost.endsWith( exclude ) ) // return true; String excludeIp = exclude.indexOf('*') >= 0 ? exclude : nslookup(exclude, true); String ip = nslookup(proxyHost, true); Pattern pattern = Pattern.compile(excludeIp); Matcher matcher = pattern.matcher(ip); Matcher matcher2 = pattern.matcher(proxyHost); if (matcher.find() || matcher2.find()) return true; } return false; } private static String nslookup(String s, boolean ip) { InetAddress host; String address; // get the bytes of the IP address try { host = InetAddress.getByName(s); if (ip) address = host.getHostAddress(); else address = host.getHostName(); } catch (UnknownHostException ue) { return s; // no host } return address; } // end lookup public static boolean isProxyEnabled() { return proxyEnabled; } public static void setProxyEnabled(boolean proxyEnabled) { ProxyUtils.proxyEnabled = proxyEnabled; } }