1. 參考
libcurl主頁https://curl.haxx.se/libcurl/
2. libcurl介紹
libcurl是一個免費,易用的客戶端傳輸庫,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP等協議。libcurl支持SSL認證,HTTP POST, HTTP PUT, FTP 上傳, HTTP form based upload, proxies, cookies,用戶名+密碼認證(Basic, Digest, NTLM, Negotiate, Kerberos),文件斷點續傳,http 代理轉發。安全
相比於Boost asio網絡庫,具備以下的優勢
1)超時時間設置簡單
2)HTTP的摘要認證已經實現
3)HTTPS支持的很好
4)HTTP交互實現的很是好服務器
3. 編譯靜態庫
下載了curl-7.61.0源碼壓縮包,解壓以後,進入projects\Windows有VS各個版本的解決方案,目前使用的是VS2015,進入VC14文件夾,裏面有lib文件夾,該文件夾裏面包含了一個libcurl的解決方案和一個libcurl現有項目(該項目將會加入到實際的解決方案中)。src文件夾包含了一系列工具生成方案。 默認狀況下,會編譯全部支持的協議進靜態庫。經過宏定義HTTP_ONLY,僅將HTTP,HTTPS編譯到靜態庫中cookie
4.HTTPS支持
curl-7.32.0(2013-08-12 00:17)版本不支持HTTPS,所以須要升級到curl-7.61.0(2018-07-11 08:01)版本。
目前在進行HTTPS開發的時候,遇到curl_easy_perform函數執行以後,返回CURLE_UNSUPPORTED_PROTOCOL錯誤,
使用的SSL代碼協議是curl_easy_setopt(hnd, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);網絡
小知識
curl 命令行依賴 openssl 庫才能使用 ssl 和 TLS。當前通常認爲 TLSv1.1 及 TLSv1.2 纔是安全的,不少 https 服務器僅支持這2個協議,再也不支持 TLSv1.0 及 ssl。可是 openssl 是從 1.0.1 才支持 TLSv1.1 及 TLSv1.2。
當在代碼中只是出現以下的SSL定義的宏
enum {
CURL_SSLVERSION_DEFAULT,
CURL_SSLVERSION_TLSv1,
CURL_SSLVERSION_SSLv2,
CURL_SSLVERSION_SSLv3,
CURL_SSLVERSION_LAST /* never use, keep last */
};
說明該版本不支持HTTPS協議,須要升級curl版本curl