需求:在vs2013上配置支持https協議的libcurl。
環境:win7(64位),vs2013
一、安裝openssl:
需要先安裝nasm和ActivePerl。
nasm需要手動配置環境變量。ActivePerl下載下來一路next安裝就好了。
我安裝openssl的時候是2018-08-03。不保證以后下面這個鏈接的方法依然有用。
我參考的是這個:https://blog.csdn.net/hpp24/article/details/54406424
親測有用。只不過生成的include lib 等目錄不對。居然在這目錄C:\usr\local\ssl
需要注意的是,由於我的系統是64位的。我的vcvars32.bat在C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin這個目錄中。
使用時需要指定頭文件路徑:
C:\usr\local\ssl\include
庫的路徑:
C:\usr\local\ssl\lib
同時要把libeay32.dll和ssleay32.dll拷貝到lib目錄下。
使用時要把上面兩個dll跟可執行文件放在一起。
#pragma comment(lib, "ssleay32.lib")
#pragma comment(lib, "libeay32.lib")
二、編譯libcurl
直接去下載最新的。https://curl.haxx.se/download.html
我下載的是這個curl-7.61.0
解壓,之后進入\curl-7.61.0\projects\Windows\VC12,打開curl-all.sln。里面有兩個工程,
選擇libcurl。配置選下面這個:
配置屬性-》VC++目錄-》包含目錄 要指定openssl的頭文件路徑。
配置屬性-》VC++目錄-》庫目錄 要指定openssl的庫目錄。
然后直接編譯就好了。
curl-7.61.0\build\Win32\VC12\DLL Release - DLL OpenSSL
這個目錄下會生成 libcurl.lib libcurl.dll。這就大功告成了。
使用時的頭文件路徑是\curl-7.61.0\include。
三、測試
可以參考這個:https://curl.haxx.se/libcurl/c/https.html
下面上我的代碼:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<curl/curl.h> #include<iostream> using namespace std; #pragma comment(lib, "libcurl.lib") #pragma comment(lib, "ssleay32.lib") #pragma comment(lib, "libeay32.lib") void test2() { curl_global_init(CURL_GLOBAL_DEFAULT); CURL *curl; CURLcode res; curl = curl_easy_init(); if (curl) { /* First set the URL that is about to receive our POST. This URL can just as well be a https:// URL if that is what should receive the data. */ curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com"); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);//忽略證書檢查 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); /* Now specify the POST data */ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl"); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); if (res) { cout << "curl_easy_perform failed res = " << res << " ErrInfo:" << curl_easy_strerror(res) << endl; } else { cout << "curl_easy_perform success " << endl; } /* always cleanup */ curl_easy_cleanup(curl); } curl_global_cleanup(); } int main() { test2(); getchar(); return 0; }
要配置curl的頭文件路徑和庫路徑,和openssl的庫路徑。
直接運行就好了。
四、總結
1)編譯openssl比較費時間,這一步一定要做,不要想偷懶,按步驟一步一步來就好了。
2)運行curl測試程序時需要鏈接libcurl和openssl的那兩個庫。特別注意要把庫放到程序運行目錄中去。我最開始懷疑自己是不是沒編譯到包含openssl的libcurl。一直在庫目錄上折騰,沒有放到運行目錄中去,折騰了將近一天。
3)查看自己編譯的libcurl是否支持https,可以編譯curl-all.sln中的curl項目,配置一樣,要選openssl的。然后會編譯出一個curl.exe。然后打開系統自帶的cmd.exe,切換到生成curl.exe的目錄,把兩個openssl的庫拷貝進來。執行紅色框兩個命令。出現下面的結果就表示你成功了。