Привет и спасибо всем за ваше время:
Фон :
Я как бы "унаследовал" эту платформу и вещи, упомянутые здесь в разделе "Фон""заложены в камне и даже хуже, по некоторым причинам я не могу их изменить.
- с использованием инфраструктуры на основе WebDriver
- с использованием BrowserMobProxy для обхода базовой аутентификации конкретного сайта
- необходимо отправлять http-запросы программно,во время или перед выполнением некоторых тестовых случаев
выпуск :
(только во время отладки!) после отправки запроса HTTP Post на(определенный) URL с недействительным сертификатом безопасности, Webdriver инициализируется, но очень медленно на самом деле получить доступ к веб-сайту, любому веб-сайту.Иногда это даже разрывает связь.
Сообщение, отображаемое в левом нижнем углу браузера: Установление безопасного соединения (для Chrome) и Выполнение рукопожатия TLS (для Firefox)
Это происходит только во время удаленной отладки.
Дополнительная информация:
- многопоточная (?) Среда веб-драйвера
- для запросов http, которые яЯ использую httpcomponents v4.4, реализованный с помощью apache / google / stackoverflow
- , устанавливающий httpClient для игнорирования ошибок SSL
- (!) Если не игнорировать ошибки SSL, запрос http очевидно будетне удается, но веб-драйвер будет работать правильно даже во время отладки
- Отладка выполняется с помощью отказоустойчивой отладки maven путем подключения моей IDE к порту 5005 удаленной JVM
Реализация связанных с httpclient вещей
Код работает, я только обрезал его часть, чтобы сохранить только соответствующие части:
httpClient SSLContext sslContext= получитьSSLContext ();
private SSLContext getSSLContext() {
try {
return SSLContexts.custom()
.loadTrustMaterial(null, new TrustSelfSignedStrategy())
.build();
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
throw new RuntimeException("Could not create custom SSLContext: ", e);
}
}
SSLConnectionSocketFactory sslConnectionSocketFactory = getSslConnectionSocketFactory(sslContext);
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create()
.setSSLSocketFactory(sslConnectionSocketFactory)
.setDefaultCredentialsProvider(getConfiguredCredentialsProvider())
.build();
sendPost
public CustomHttpResponse sendPost(String url, HttpEntity httpEntity) {
HttpPost httpPost = new HttpPost(url);
int statusCode;
String responseString;
if (httpEntity != null) {
httpPost.setEntity(httpEntity);
}
CloseableHttpResponse closeableHttpResponse = null;
try {
closeableHttpResponse = httpClient.execute(httpPost);
HttpEntity responseEntity = closeableHttpResponse.getEntity();
responseString = EntityUtils.toString(responseEntity);
statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
} catch (IOException exception) {
throw new RuntimeException("Unable to close or execute a POST connection: ", exception);
} finally {
try {
closeableHttpResponse.close();
} catch (IOException e) {
//exceptionHandling
}
}
if (statusCode == 0 && responseString == null) {
throw new RuntimeException("StatusCode or responseString is null!");
}
return new CustomHttpResponse(statusCode, responseString);
}