gsoap远程调用之数字证书

有的时候gsoap调用别人提供的接口,需要认证才能进去。

1.首先是需要用户名和密码,可以如下指定:

struct soap info_soap;
soap_init(&info_soap);
info_soap.userid = "superadmin";
info_soap.passwd = "123456";


2.需要下载对应的证书,可以用火狐下载数字证书,修改名字放在对应的开发目录下面,以供调用,然后在程序中指明证书的名字,如下:

soap_ssl_client_context(&info_soap, 0, NULL, NULL, "/opt/create_user/sipXCert.pem", "/opt/create_user/", NULL);


注意:如果要下载指定的wsdl文件,要到指定的说明文档复制对应下载链接,替换对应服务器的IP地址:https://yourdomain:8443/sipxconfig/services/*Service
打开这个网址的时候会提示你证书的问题,然后下载该证书就可以了。

在linux下可以直接输入命令下载这个wsdl:wget --no-check-certificate URL --http-user=superadmin --http-password=123456


可以参看下面的完整代码:
#include <iostream>
#include <string>

#include "UserServiceSoapBinding.nsmap"
#include "soapH.h"

int sendWebserviceItem(
        const char* url,
        const char* superadminPin,
        const char* userName
        )
{
    int res = -1;
   
    struct soap info_soap;
    soap_init(&info_soap);
    info_soap.userid = "superadmin";
    info_soap.passwd = "123456";
    //info_soap.proxy_userid = "superadmin";
    //info_soap.proxy_passwd = "123456";
    info_soap.send_timeout = 3;
    info_soap.recv_timeout = 3;
    soap_set_mode (&info_soap, SOAP_C_UTFSTRING);
#ifdef DEBUG
    soap_set_test_logfile (&info_soap, "TEST.log");
    soap_set_test_logfile (&info_soap, "RECV.log");
    soap_set_test_logfile (&info_soap, "SEND.log");
#endif

#ifdef _PROXY_IP
    _soap.proxy_host = _PROXY_IP;
#endif

#ifdef _PROXY_PORT
    _soap.proxy_port = _PROXY_PORT;
#endif

    ns1__AddUser preq;
    struct __ns1__addUserResponse pres;
    preq.pin = superadminPin;
    preq.user = new ns1__User;
    if (preq.user == NULL)
    {
        std::cout << "preq.user new memory failed" << std::endl;
        soap_print_fault(&info_soap, stderr);
#ifdef DEBUG
        soap_close_logfiles (&info_soap);
#endif
        soap_cleanup(&info_soap);
        soap_destroy (&info_soap);
        soap_end (&info_soap);
        soap_done (&info_soap);
        return -1;
    }
    std::string strUserName = userName;
    preq.user->userName = strUserName;

    soap_ssl_client_context(&info_soap, 0, NULL, NULL, "/opt/create_user/sipXCert.pem", "/opt/create_user/", NULL);
    //info_soap.authrealm = SOAP_AUTHENTICATION_DIGEST;
    res = soap_call___ns1__addUser(&info_soap, url, "", &preq, pres);
    if (res != 0)
    {
        std::cout << "soap_call___ns1__addUser error:" << res << " soap.error:" << info_soap.error << std::endl;
#ifdef DEBUG
        soap_close_logfiles (&info_soap);
#endif
        delete preq.user;
        preq.user = NULL;
        soap_cleanup(&info_soap);
        soap_destroy (&info_soap);
        soap_end (&info_soap);
        soap_done (&info_soap);
        return -1;
    }

#ifdef DEBUG
    soap_close_logfiles (&info_soap);
#endif
    delete preq.user;
    preq.user = NULL;
    soap_cleanup(&info_soap);
    soap_destroy (&info_soap);
    soap_end (&info_soap);
    soap_done (&info_soap);

    return 0;
}

int main(int argc, char* argv[])
{
    if (argc != 4)
    {
        std::cout << "arg error" << std::endl;
        return -1;
    }
    int result = sendWebserviceItem(argv[1], argv[2], argv[3]);  
    if (result != 0)
        return -1;

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值