1. 程式人生 > >libcurl 如何支援https

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;
}