libcurl 如何支援https
執行curl_easy_perform()的時候,返回錯誤程式碼:CURLE_UNSUPPORTED_PROTOCOL(1),同時通過列印日誌會得到錯誤提示:" Protocol https not supported or disabled in libcurl"。意思是:不支援HTTPS協議!有人說新增下面兩行程式碼就可以解決:
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,false);//設定為不驗證證書和HOST
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,false);
測試發現,還是不能支援HTTPS訪問!此時,如果還是無法訪問HTTPS的網頁的話,問題可能出在libcurl本身,很可能是 libcurl 在編譯的時候沒有選擇支援SSL,所以還是重新編譯一次libcurl吧!這裡要提醒大家的是,通過用CMake工具生成的sln檔案來直接編譯lib庫(我之前就是這樣編譯的),也很可能沒有做SSL支援。所以還是用命令列工具來編譯,先製作一個build.bat檔案,待會要用到,內容如下:
@REM @echo off @IF [%1]==[debug] ( @echo 正在使用debug模式編譯libcurl~~~ @nmake /f Makefile.vc WITH_DEVEL=../../deps mode=static VC=12 ENABLE_IDN=no RTLIBCFG=dll DEBUG=yes MACHINE=x86 ) ELSE ( @echo 正在使用release模式編譯libcurl~~~ @nmake /f Makefile.vc WITH_DEVEL=../../deps mode=static VC=12 ENABLE_IDN=no RTLIBCFG=dll DEBUG=no MACHINE=x86 ) @REM @echo on
本人下載的是7.48.0版本,接著在開始選單中開啟Visual Studio 2013 > Visual Studio Tools > VS2013開發人員命令提示,cd到curl-7.48.0的winbuild目錄下:輸入build.bat 按下回車鍵開始編譯,等待編譯完成!如果是debug版本,則再輸入空格 debug,回車!開始編譯。。。最後,貼上一段使用libcurl進行https訪問的程式碼,希望對大家有所幫助。
int https_get(const std::string & strUrl, std::string & strResponse, const char * pCaPath) { CURLcode res; CURL* curl = curl_easy_init(); if(NULL == curl) { return CURLE_FAILED_INIT; } curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str()); curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse); curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); if(NULL == pCaPath) { curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);//設定為不驗證證書和HOST curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); } else { curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true); curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath); } curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3); curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3); res = curl_easy_perform(curl); curl_easy_cleanup(curl); return res; }