最近在工作中需要开发一个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的安装步骤说明:
openssl安装步骤
gunzip opensll-0.9.8m.tar.gz
tar xvfopensll-0.9.8m.tar
./config --prefix=自定义安装路径
make
make install
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接口,布布扣,bubuko.com
IBM AIX5.3 linux下C/C++实现HTTPS接口
原文:http://luoshibin123.blog.51cto.com/9117576/1434103