Я пытаюсь создать тесты автоматизации для следующего сценария:
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);