Я боролся с этой проблемой последние полтора дня и, наконец, сломался после того, как мои поиски не дали ничего, что могло бы решить мою проблему.
У меня есть приложение Spring-boot, которое выполняет вызовы SOAP на удаленный сервер.Все отлично работает с STS или с локальным запуском на моем ноутбуке для разработки (либо с помощью STS> Run, mvn spring-boot: run, либо с помощью запуска файла JAR локально. Когда я развертываю код (толстый jar) на нашем сервере разработки corpвсе мои запросы терпят неудачу с «Отказано в соединении (Соединение отказано)».
Для сортировки я сделал такой же запрос через Curl на сервере разработки, чтобы увидеть, в чем проблема:
ЗАПРОС БАРЫ:
curl http://some.remote.server
-> curl: (7) Не удалось подключиться к: 80; соединение отклонено
Запрос с настройками прокси / AUTH:
export http_proxy=http://<proxy_user>:<proxy_pass>@<proxy_host>:<proxy_port>
curl -x $http_proxy http://some.remote.server
->Удачи!
Итак, на данный момент я почти уверен, что проблема, с которой я сталкиваюсь, заключается в том, что мои вызовы не перенаправляются через прокси.
Я пытался добавитьнастройки прокси для кода, но мне не нравится идея уменьшения переносимости (кроме того, это не сработало).
Я попытался установить параметры в командной строке с помощью:
java -Dhttp.proxyHost=<corp proxy host addr> -Dhttp.proxyPort=3128 -Dhttp.proxyUser=<proxy username> -Dhttp.proxyPassword=<proxy pass> -jar Application.jar
Ничто из того, что я делаю, не делает ничего особенногоce.
Какие еще инструменты / методы я могу использовать для диагностики / устранения этой проблемы?У меня не хватает волос, чтобы вытащить!
[примечание: в конечном итоге это будет выполняться из контейнера Docker, но я удалил как можно больше движущихся частей, чтобы упростить решение.Я думаю, что я делаю что-то очень простое неправильно, потому что я уверен, что это не уникальная проблема.]
public String makeTestRequest()
{
try
{
final String authUser = PROXY_USER;
final String authPassword = PROXY_PASS;
Authenticator.setDefault(
new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
authUser, authPassword.toCharArray());
}
}
);
System.setProperty("http.proxyUser", PROXY_USER);
System.setProperty("http.proxyPassword", PROXY_PASS);
System.setProperty("http.proxyHost", PROXY_HOST);
System.setProperty("http.proxyPort", String.valueOf(PROXY_PORT));
URL url = new URL(REMOTE_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
System.out.println("Proxy? " + con.usingProxy()); // proxy?
con.setRequestMethod("GET");
int status = con.getResponseCode();
if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM)
{
String location = con.getHeaderField("Location");
URL newUrl = new URL(location);
con = (HttpURLConnection) newUrl.openConnection();
}
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null)
{
content.append(inputLine);
}
// cleanup / return
in.close();
con.disconnect();
return content.toString();
}
catch (Exception e)
{
e.printStackTrace();
return e.getMessage();
}
}