2015-03-01 3 views
0

Я написал клиент для экспертного веб-сервиса с использованием C++ и gSOAP. В настоящее время этот клиент должен вызвать процедуру SendSMS и отправить одно текстовое SMS-сообщение на номер, указанный вместо «TO» (см. Трески ниже). Программа работает гладко, но текстовое сообщение sms не доставляется. После исследования я обнаружил, что линияОшибка SSL при запуске клиента веб-службы, созданного с помощью gSOAP

int message_status_code=service.SendSMS("https://www.experttexting.com/exptapi/exptsms.asmx","SendSMS",request_packet,request_packet_response); 

дает код ошибки, который имеет значение, равное SOAP_SSL_ERROR.

Чтобы исправить эту проблему, я использовал флаг -DWITH_OPENSSL при компиляции с использованием g ++, но безрезультатно.

Пожалуйста, помогите мне отладить эту проблему.

#include "soapH.h" 
#include "ExptTextingAPISoap.nsmap" 
#include "soapExptTextingAPISoapProxy.h" 

int main(){ 
    struct soap soap; 
    soap_init(&soap); 
    string UserID="MY USER Id"; 
    string PWD="MY PASSWORD"; 
    string APIKEY="MY API KEY"; 
    string FROM="FROM"; 
    string TO="RECEIVER"; 
    string MSG="MY MESSAGE"; 
    _ns1__SendSMS* request_packet=soap_new_set__ns1__SendSMS(&soap,&UserID,&PWD,&APIKEY,&FROM,&TO,&MSG); 
    _ns1__SendSMSResponse* request_packet_response=soap_new__ns1__SendSMSResponse(&soap); 
    ExptTextingAPISoapProxy service(soap); 
    int message_status_code=service.SendSMS("https://www.experttexting.com/exptapi/exptsms.asmx","SendSMS",request_packet,request_packet_response); 
    service.destroy(); 
    return 0; 
} 
+0

Кажется, что сервер ожидает SSL-соединения, но на стороне клиента нет никого. Где ваш код для подключения SSL? – Kahn

+0

У меня нет кода для подключения SSL. Я назвал тот же веб-сервис в php, используя SoapClient, и он работал –

+0

. Я мало знаю о SoapClient, но я не вижу никакого подтверждения SSL в этом коде. Вы пробовали SSL-квитирование? – Kahn

ответ

0

Перед выполнением вызова службы необходимо предоставить контекст ssl. Если сервер не требует аутентификации клиента, вы можете использовать код ниже, иначе вам нужно предоставить сертификат клиента и ключ.

if (soap_ssl_client_context(&soap, 
    /* SOAP_SSL_NO_AUTHENTICATION, */ /* for encryption w/o authentication */ 
    /* SOAP_SSL_DEFAULT | SOAP_SSL_SKIP_HOST_CHECK, */ /* if we don't want the host name checks since these will change from machine to machine */ 
    SOAP_SSL_DEFAULT, /* use SOAP_SSL_DEFAULT in production code */ 
    NULL,  /* keyfile (cert+key): required only when client must authenticate to server (see SSL docs to create this file) */ 
    NULL,  /* password to read the keyfile */ 
    "cacert.pem", /* optional cacert file to store trusted certificates, use cacerts.pem for all public certificates issued by common CAs */ 
    NULL,  /* optional capath to directory with trusted certificates */ 
    NULL  /* if randfile!=NULL: use a file with random data to seed randomness */ 
)) 
    { soap_print_fault(&soap, stderr); 
    exit(1); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^