首页 > 代码库 > IBM AIX5.3 linux下C/C++实现HTTPS接口

IBM AIX5.3 linux下C/C++实现HTTPS接口

 最近在工作中需要开发一个Https接口,其不同于http、soap等协议,可以直接组织报文并发送,不存在加密,认证和获取密钥等安全操作。且之前开发的项目没有开发过这类接口,所以当时压力很大。    

    通过网上查阅资料,要实现https接口,必须现在本机上安装openssl和curl(说明:只用opessl也可以实现https,目前我是使用openssl和curl)。

    在安装openssl和curl过程中吃了不少苦头,因为服务器是IBM AIX5.3,服务器很久没升级打补丁很多软件安装都不能顺利进行,可以说是高不成低不就。尝试很多发布版本的安装,结果都不尽人意,在快要绝望时,在http://blog.sina.com.cn/s/blog_541a3cf101017869.html网站上看到了希望,在IBM AIX5.3下安装OpenSSL 0.9.8m可以成功,之前安装的是OpenSSL 0.9.8a失败(报Trace/BPT trap(coredump)错误)。

    下面说明下openssl和curl的安装步骤说明:

  1. openssl安装步骤

    gunzip opensll-0.9.8m.tar.gz

    tar xvfopensll-0.9.8m.tar

    ./config --prefix=自定义安装路径

    make

    make install

  1. curl安装步骤

    gunzip curl-7.24.0.tar.gz

    tar xvf curl-7.24.0.tar

    ./configure --with-ssl=openssl的安装路径 --prefix=自定义curl安装路径

    make

    make install

 

一下给出https客户端接口代码:

long CHomeAnFangIt::Post(const std::string& url,const std::string& putObject, std::string& rsp)
{

    CURL* curl=curl_easy_init();
    if(!curl)
    {
        logger->info("Init curl error.");
        return -1;
    }

    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 120);
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
    curl_easy_setopt(curl, CURLOPT_POST, true); // POST
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,s_UrlWrite);
    curl_easy_setopt( curl , CURLOPT_POSTFIELDS, putObject.c_str());
    curl_easy_setopt( curl , CURLOPT_POSTFIELDSIZE, putObject.size());
    curl_easy_setopt(curl,CURLOPT_WRITEDATA,&rsp);
    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
    curl_easy_setopt(curl, CURLOPT_USE_SSL, 1);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);

    CURLcode c=curl_easy_perform(curl);
    if(c!=CURLE_OK)
    {
        logger->info("curl_easy_perform error,err=%d",c);
        curl_easy_cleanup(curl);
        return -1;
    }

    long rsp_code=0;
    curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE,&rsp_code);

    curl_easy_cleanup(curl);
    return rsp_code;
}

 

总结:

    对新知识的上手速度不够,当遇到一个难题陷入瓶颈时,想到的是退缩,认为此问题无法解决。这样的思维是不好的。要利用目前所有信息,不断的搜索查询,总会有奇迹出现,胜利总会眷顾永不放弃的人。

    当一个程序dump掉后,会在当前目录下生成core文件,我们可以使用gdb单步调式查看core发生错误的位置,把调用函数全称搜索并获取信息解决问题。


IBM AIX5.3 linux下C/C++实现HTTPS接口