socket、wininet、winhttp這三個是windows的api。
socket是指win32api中的socket api,是最底層的,更低的tcp等不使用。
wininet的目的是給開發客戶端用的。基於ie瀏覽器底層,可以cache頁面,cookie和cache都儲存在ie瀏覽器的相應目錄下。如果利用其自動儲存的話,只能儲存乙個帳號的,就如同瀏覽器。如果要截留cookie,需要自己解析。
winhttp是為伺服器端設計的,可以看作wininet的強化版,例如多執行緒。它不結合ie瀏覽器底層。cookie方面,不自動儲存到磁碟,如果要截留cookie,需要自己解析。因為是函式所以無法序列化。
最終方案是使用libcurl。不能封裝成類,封在乙個函式裡。
第三方庫常見的是libwww、libcurl等。
libcurl(通常稱curl),curl即「command url」,被稱做「命令列瀏覽器」,這個東西是unix常用命令curl的基礎。據libcurl官網(自己說,libcurl比libwww更優秀更強大且更易於使用。libwww的一大缺點是複雜、難於使用。libwww是w3c出品,具有快取和html解析功能,這兩個功能curl沒有。而curl支援的協議,除了http外還有ftp等一大堆。更多第三方庫見 。
公認的、使用比較多的庫是libcurl,libcurl是本文的重點。著名瀏覽器核心webkit就使用了libcurl。php的curl擴充套件庫也是基於此庫。webkit用到的眾多第三方庫可能有參考使用價值,如下:
cairo
乙個2d繪相簿
casqt
unicode處理用的庫,從qt中抽取部分**形成的
expat
乙個xml sax解析器的庫
freetype
向量字型檔介面庫,用於訪問ttf向量字型檔案
libcurl
乙個開源的url庫,支援http、ftp等協議
libjpeg,libpng
影象解碼庫
libxml
基於dom樹的xml解析器
libxslt
xml transform engine
pthread
pthread庫,port of the posix thread library
sqlite3
乙個小型的資料庫,據稱在型入式平台是訪問速度最快的資料庫。
開源,編譯後就乙個400k的sqlite.dll。移植非常方便,純c寫的。
wceshunt
乙個用於windows ce平台下的c常用函式封裝庫
zlib
zlib庫。用於解壓縮。
(libcurl的使用,首先需要提到的兩個函式就是curl_global_init()和 curl_global_cleanup()。libcurl要用到一系列的全域性常量,curl_global_init()函式就是初始化這些變數,並分配一些全域性資源;curl_global_cleanup()則負責釋放這些資源。因此一般情況下,在呼叫libcurl函式之前,先用 curl_global_init(curl_global_all)做初始化,在呼叫完畢後,用curl_global_cleanup()退出。需要注意的是,這些全域性變數和資源並不是執行緒安全的,因此,在多執行緒應用的環境中,最好不要多次呼叫curl_global_init()和curl_global_cleanup(),呼叫其他函式並不會改變這些全域性變數和資源。
libcurl介面呼叫方式,libcurl支援3種不同的介面呼叫方式,分別是"easy"、"multi"和"share"模式。
1.libcurl-easy是一組同步介面,函式都 是curl_easy_*形式,這種模式呼叫curl_easy_perform()函式進行url資料傳輸,直到傳輸完成函式才返回。
2.libcurl-share允許在多執行緒中操作共享資料。
編譯。官網不直接提供編譯好的鏈結庫,但是提供較為完整的編譯條件。編譯方法參見
使用方法:
參見 和 。
另補充:
1、
常用的幾個網路api
1.通過 獲取ip 標頭檔案struct hostent gethostbyname const char name 返回乙個目的主機的結構體 struct hostent define h addr h addr list 0 儲存的是ip位址 h addr 儲存了目的主機的ip不好意思他是乙個網...
Visual C 程式設計中的API和SDK
visual c 程式設計中的api和sdk 我們在編寫標準c程式的時候,經常會呼叫各種庫函式來輔助完成某些功能 初學者使用得最多的c庫函式就是printf了,這些庫函式是由你所使用的編譯器廠商提供的。在windows平台下,也有類似的函式可供呼叫 不同的是,這些函式是由windows作業系統本身提...
kafka高階api和低階api的區別和聯絡
優點 高階api寫起來簡單 不需要去自行去管理offset,系統通過zookeeper自行管理 不需要管理分割槽,副本等情況,系統自動管理 消費者斷線會自動根據上一次記錄在 zookeeper中的offset去接著獲取資料 預設設定5s更新一下 zookeeper 中存的的offset 版本為0.1...