All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openqa.selenium.server.browserlaunchers.Proxies Maven / Gradle / Ivy

Go to download

Selenium automates browsers. That's it! What you do with that power is entirely up to you.

There is a newer version: 3.9.1
Show newest version
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

package org.openqa.selenium.server.browserlaunchers;

import static org.openqa.selenium.remote.CapabilityType.PROXY;
import static org.openqa.selenium.remote.CapabilityType.ForSeleniumServer.AVOIDING_PROXY;
import static org.openqa.selenium.remote.CapabilityType.ForSeleniumServer.ONLY_PROXYING_SELENIUM_TRAFFIC;
import static org.openqa.selenium.remote.CapabilityType.ForSeleniumServer.PROXYING_EVERYTHING;

import com.google.common.base.Preconditions;

import org.openqa.selenium.Capabilities;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.CapabilityType.ForSeleniumServer;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;

public class Proxies {
  public static final String PROXY_CONFIG = CapabilityType.PROXY;

  public static boolean isProxyRequired(Capabilities capabilities) {
    return capabilities.is("proxyRequired") || capabilities.getCapability(PROXY_CONFIG) != null;
  }


  /**
   * Generate a proxy.pac file, configuring a dynamic proxy.
   * 

* If proxySeleniumTrafficOnly is true, then the proxy applies only to URLs containing * "/selenium-server/". Otherwise the proxy applies to all URLs. */ public static File makeProxyPAC(File parentDir, int port, Capabilities capabilities) { return makeProxyPAC(parentDir, port, System.getProperty("http.proxyHost"), System.getProperty("http.proxyPort"), System.getProperty("http.nonProxyHosts"), capabilities); } public static File makeProxyPAC(File parentDir, int port, String configuredProxy, String proxyPort, String nonProxyHosts, Capabilities capabilities) { DoNotUseProxyPac pac = newProxyPac(port, configuredProxy, proxyPort, nonProxyHosts, capabilities); Proxy proxy = Proxy.extractFrom(capabilities); if (proxy != null && proxy.getHttpProxy() != null) { pac.defaults().toProxy(proxy.getHttpProxy()); } try { File pacFile = new File(parentDir, "proxy.pac"); Writer out = new FileWriter(pacFile); pac.outputTo(out); out.close(); return pacFile; } catch (IOException e) { throw new WebDriverException("Unable to configure proxy. Selenium will not work.", e); } } /** * @deprecated Use Proxy.extractFrom(Capabilities) */ @Deprecated @SuppressWarnings({"unchecked"}) public static Proxy extractProxy(Capabilities capabilities) { Object rawProxy = capabilities.getCapability(PROXY); Proxy proxy = null; if (rawProxy != null) { if (rawProxy instanceof Proxy) { proxy = (Proxy) rawProxy; } else if (rawProxy instanceof Map) { proxy = new Proxy((Map) rawProxy); } } return proxy; } static DoNotUseProxyPac newProxyPac(int port, String configuredProxy, String proxyPort, String nonProxyHosts, Capabilities capabilities) { DoNotUseProxyPac existingConfig = (DoNotUseProxyPac) capabilities.getCapability( ForSeleniumServer.PROXY_PAC); DoNotUseProxyPac pac = existingConfig == null ? new DoNotUseProxyPac() : existingConfig; Object tempProxy = capabilities.getCapability(CapabilityType.PROXY); if (tempProxy != null) { Proxy proxy = Preconditions.checkNotNull(Proxy.extractFrom(capabilities)); if (proxy.getHttpProxy() != null) { pac.defaults().toProxy(proxy.getHttpProxy()); } else if (proxy.getProxyAutoconfigUrl() != null) { URI pacUri = null; try { pacUri = new URI(proxy.getProxyAutoconfigUrl()); pac.deriveFrom(pacUri); } catch (URISyntaxException e) { throw new WebDriverException(e); } } } if (configuredProxy != null) { String proxyToUse = configuredProxy; if (proxyPort != null) { proxyToUse += ":" + proxyPort; } pac.defaults().toProxy(proxyToUse); } String defaultProxy = "DIRECT"; if (configuredProxy != null) { defaultProxy = "PROXY " + configuredProxy; if (proxyPort != null) { defaultProxy += ":" + proxyPort; } } String seleniumServerAsProxy = "localhost:" + port + "; " + defaultProxy; if (isOnlyProxyingSelenium(capabilities)) { pac.map("*/selenium-server/*").toProxy(seleniumServerAsProxy); if (nonProxyHosts != null && nonProxyHosts.trim().length() > 0) { String[] hosts = nonProxyHosts.split("\\|"); for (String host : hosts) { pac.mapHost(host).toNoProxy(); } } } else { pac.defaults().toProxy(seleniumServerAsProxy); } return pac; } public static boolean isProxyingAllTraffic(Capabilities capabilities) { // According to the original logic of Selenium Server, the only time when // the selenium sever wouldn't be proxying all traffic was when it was // configured to only proxy selenium traffic, was avoid the proxy and had // not been asked to proxy everything. Modeling that first before tidying // up the logic. return !(capabilities.is(ONLY_PROXYING_SELENIUM_TRAFFIC) && capabilities.is(AVOIDING_PROXY) && !capabilities.is(PROXYING_EVERYTHING)); } public static boolean isOnlyProxyingSelenium(Capabilities capabilities) { return !isProxyingAllTraffic(capabilities); } public static Capabilities setProxyEverything(Capabilities source, boolean isProxyingEverything) { DesiredCapabilities toReturn = newDesiredCapabilities(source); toReturn.setCapability(PROXYING_EVERYTHING, isProxyingEverything); return toReturn; } public static Capabilities setAvoidProxy(Capabilities source, boolean avoidProxy) { DesiredCapabilities toReturn = newDesiredCapabilities(source); toReturn.setCapability(AVOIDING_PROXY, avoidProxy); return toReturn; } public static Capabilities setOnlyProxySeleniumTraffic(Capabilities source, boolean onlyProxySeleniumTraffic) { DesiredCapabilities toReturn = newDesiredCapabilities(source); toReturn.setCapability(ONLY_PROXYING_SELENIUM_TRAFFIC, onlyProxySeleniumTraffic); return toReturn; } public static Capabilities setProxyRequired(Capabilities source, boolean proxyRequired) { DesiredCapabilities toReturn = newDesiredCapabilities(source); toReturn.setCapability("proxyRequired", proxyRequired); return toReturn; } private static DesiredCapabilities newDesiredCapabilities(Capabilities source) { if (source instanceof DesiredCapabilities) { return (DesiredCapabilities) source; } return new DesiredCapabilities(source); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy