Я использую библиотеку okhttp (4.4.0) java, чтобы отправить запрос на публикацию в созданный мной веб-сервис. Кроме того, этот веб-сервис требует базовой аутентификации c и принимает только пост-запросы. Веб-служба находится за прокси-сервером, который просто перенаправляет запросы https на запросы http через порт 8080. Мой код выглядит следующим образом:
...
RequestBody formBody = new FormBody.Builder()
.add("foo", this.foo)
.add("bar", this.bar)
.build();
Request request = new Request.Builder()
.url("https://localhost/myWebApp")
.addHeader("User-Agent", "OkHttp Bot")
.addHeader("Authorization", Credentials.basic("myUser", "myPwd"))
.post(formBody)
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().bytes();
} catch (IOException e) {
e.printStackTrace();
}
...
Запрос не выполняется со следующей ошибкой:
Unexpected code Response{protocol=http/1.1, code=501, message=Not Implemented, url=https://localhost/myWebApp/}
Метод doGet веб-службы 'myWebApp' настроен на отправку сообщения о состоянии 501 Не реализовано. Но когда я выполняю пост-запрос, метод doGet не должен вызываться.
Просматривая журнал доступа моего веб-сервера, я обнаружил следующее:
127.0.0.1 - - [30/Mar/2020:09:05:24 +0200] "POST /myWebApp HTTP/1.1" 302 -
127.0.0.1 - myUser [30/Mar/2020:09:05:25 +0200] "GET /myWebApp/ HTTP/1.1" 501 1029
Итак, есть и почтовый запрос, и запрос на получение. Похоже, что сначала делается попытка отправить тело сообщения (без аутентификации?), А затем запрос get с аутентификацией, который был отклонен моим веб-сервисом.
Есть ли способ заставить это работать для меня? Я что-то пропустил? Пожалуйста, помогите!