您好,登錄后才能下訂單哦!
最近在工作中需要開發一個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發生錯誤的位置,把調用函數全稱搜索并獲取信息解決問題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。