Невозможно воспроизвести видео из-за того, что IP-адрес региона не соответствует коду страны с помощью BrowserMob Proxy Selenium - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь создать тесты автоматизации для следующего сценария:

Given i am in "<country>"
Given I navigate to the 'Home' page as a logged in user
When I click on the play button of a video under 'Home' page
Then the video starts playing

Examples:
  | country     |
  | Brazil      |
  | New Zealand |
  | Italy       |

Чтобы подключиться к другой стране, я создаю прокси, а затем я изменяю код X-CountryCode на код страны, который я хотеть. Проблема в том, что когда я пытаюсь воспроизвести видео, оно никогда не воспроизводится, потому что я получаю 403 запрещенных для запроса. Кажется, у сервера есть какая-то защита, чтобы определить, совпадает ли ваш IP-регион с кодом страны, который я предоставляю, или чем-то другим. IP-адрес моей локальной сети из Португалии, но я передаю код X-страны в Бразилию.

Может кто-нибудь помочь мне понять, как я могу манипулировать IP-адресом в той же стране заголовка X-страны ?

Ниже приведен код, который я использую для создания прокси и изменения заголовка:

public class ProxyVPN extends BrowserMobProxyServer {

    private static ProxyVPN proxyVPN;

    private String countryCode;
    private ArrayList<String> codes = new ArrayList<>();


    private ProxyVPN() {
        this.addRequestFilter((request, contents, messageInfo) -> {

            getLogger().info("SETUP REQUEST [Country: " + countryCode + "]");

            if (countryCode != null) {
                request.headers().set("X-CountryCode", countryCode);
            } else {
                request.headers().remove("X-CountryCode");
            }

            getLogger().info("[REQUEST][" + request.getMethod() +
                    "][" + request.getUri() +
                    "][" + request.headers().entries() +
                    "]" + addResponseFilter(););
            return null;
        });
    }

    public static ProxyVPN getInstance() {
        if (proxyVPN == null) {
            proxyVPN = new ProxyVPN();
        }
        return proxyVPN;
    }

    BrowserMobProxy getProxyServer() {
        getLogger().info("START PROXY");
        this.setTrustAllServers(true);
        getInstance().start(8080);
        return proxyVPN;
    }

    Proxy getSeleniumProxy() {
        return ClientUtil.createSeleniumProxy(proxyVPN);

    }


    public void stopProxy() {
        this.stop();
    }


    public void overwriteCountryCodeHeader(String country) {
        switch (country.toLowerCase()) {
            case "brazil":
                countryCode = "BR";
                break;
       }
    }
}


private void useChrome(boolean isProxy) throws MalformedURLException {

            WebDriverManager.chromedriver().setup();
                ChromeOptions options = new ChromeOptions();
                getLogger().info("BrowserMob Proxy running on port: " + ProxyVPN.getInstance().getProxyServer().getPort());
                options.setAcceptInsecureCerts(true);
                options.setCapability(CapabilityType.PROXY, ProxyVPN.getInstance().getSeleniumProxy());
                driver = new ChromeDriver(options);
...