Я пишу клиентское приложение gSoap для службы, которая имеет стандартные версии http и https. Все, что я написал до сих пор, отлично работает со службой http, но когда я переключаюсь на службу https, я внезапно получаю ошибки.
Единственное изменение, которое я внес в код поддержки https, заключалось в добавлении следующего при запуске:
soap_ssl_init();
if(soap_ssl_client_context(&_tradeService, SOAP_SSL_SKIP_HOST_CHECK, NULL, NULL, NULL, NULL, NULL)) {
handleError("Failed to set up SSL connection");
return;
}
Если у меня включен флаг -DDEBUG
, я получаю сообщение об ошибке в отношении сертификатов: «Ошибка проверки SSL или предупреждение с сертификатом на глубине 2: самозаверяющий сертификат в цепочке сертификатов», что не приводит к тому, что soap_ssl_client_context
возвращает ошибку, и я не думаю, это очень важно, так как пока я тестирую, я не особо забочусь об аутентификации хоста.
Настоящая проблема заключается в этой ошибке:
Ошибка SOAP 1.2: SOAP-ENV:Sender [без субкода] «Невозможно обработать запрос без допустимого параметра действия. Укажите допустимое действие мыла».
который я получаю, когда пытаюсь сделать запрос в службу. Если я посмотрю журнал отправки, который генерирует gsoap, я увижу параметр SoapAction, установленный в исходящем заголовке. Фактически, если я сравниваю журналы отправки для служб http/https, единственная разница заключается в том, что URL-адреса для защищенной службы имеют префикс https.
Затем я подумал, что, возможно, что-то не так с сервером, поэтому я использовал curl для отправки тех же данных XML, которые gsoap зарегистрировал, с теми же заголовками. Это отлично работает, я вижу нормальный ответ с ожидаемыми данными. Это наводит меня на мысль, что, может быть, я неправильно настраиваю SSL?
Другая проблема, с которой я столкнулся, которой не было в документации, заключалась в том, что при сборке с флагами -DWITH_OPENSSL -lgsoapssl++ -lssl -lcrypto
я все еще получал ошибки компоновщика о методах ssl gsoap. Мне пришлось включить stdsoap2_ssl_cpp.cpp
в свою сборку, чтобы решить эти проблемы, что мне показалось странным.
Кто-нибудь пытался сделать это до этого, может дать мне несколько советов?