1. 程式人生 > >物聯網協議 HTTP libcurl

物聯網協議 HTTP libcurl

參考https://yq.aliyun.com/ask/300773

curl是利用URL語法在命令列方式下工作的開原始檔傳輸工具。 
它支援很多協議:DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, 
LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP。 
curl同樣支援SSL證書,HTTP POST, HTTP 
PUT,FTP上傳,基於表單的HTTP上傳,代理(proxies)、cookies、使用者名稱/密碼認證(Basic, Digest, 
NTLM等)、下載檔案斷點續傳,上載檔案斷點續傳(file transfer resume),http代理伺服器管道(proxy 
tunneling)以及其他特性。

libcurl為一個免費開源的,客戶端url傳輸庫,支援DICT, FILE, FTP, FTPS, Gopher, HTTP, 
HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, 
SMTP, SMTPS, Telnet and TFTP等協議。 
同curl一樣,libcurl也支援SSL證書,HTTP POST, HTTP 
PUT,FTP上傳,基於表單的HTTP上傳,代理(proxies)、cookies、使用者名稱/密碼認證(Basic, Digest, 
NTLM等)、下載檔案斷點續傳,上載檔案斷點續傳(file transfer resume),http代理伺服器管道(proxy 
tunneling)等。 
curl與libcurl對比 

相同點 

curl和libcurl都可以利用多種多樣的協議來傳輸檔案,包括HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE等。 

不同點 

curl是命令列工具,可以通過shell或指令碼來執行curl。curl底層所使用的庫是libcurl。 
libcurl是一個庫,通常與別的程式繫結在一起使用,如命令列工具curl就是封裝了libcurl庫。所以我們也可以在你自己的程式或專案中使用libcurl以獲得類似CURL的強大功能。接下來將要介紹的PHP擴充套件就是對curl的一個封裝。
libcurl是高度可移植的,可以工作在不同的平臺上,支援Windows,Unix,Linux等。  

curl_global_init()接收一個引數,告訴libcurl如何初始化。引數CURL_GLOBAL_ALL 會使libcurl初始化所有的子模組和一些預設的選項,通常這是一個比較好的預設引數值。

curl_easy_setopt(curl, CURLOPT_URL, filename); //設定下載地址
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);//設定超時時間
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);//設定寫資料的函式
curl_easy_setopt(curl, CURLOPT_WRITEDATA, str);//設定寫資料的變數
res = curl_easy_perform(curl);//執行下載
if(CURLE_OK != res) return NULL;//判斷是否下載成功

curl_global_cleanup//當應用程式不再使用libcurl的時候,應該呼叫curl_global_cleanup來釋放相關的資源。在程式中,應當避免多次呼叫curl_global_init和curl_global_cleanup。它們只能被呼叫一次。