curl c c api介面使用例程

2021-04-22 00:56:28 字數 3822 閱讀 3995

linux下php擴充套件curl的安裝

curl 中文使用者手冊(一)

curl中文使用者手冊(二)

curl中文使用者手冊(三)

[**] php curl函式擴充套件文件

php curl擴充套件使用的例子

除以上這些curl也提供一套網路c/c++ api的使用介面,以下是乙個源**例程:

前兩天看到有人求客戶端socket 發http包的**,受flw版主啟發找了一些perl的資料,不過對perl 還是不太熟悉。也沒有深入的 研究。無意中發現了libcurl.so 這個庫。去google上搜尋發現它是處理客戶端傳送http請求的庫 以及可以處理web伺服器回送回來的 包。研究了兩天將研究的成果,共享出來給大家一起研究。

參考:http://curl.haxx.se/  這是curl開發者的首頁。

利用libcurl.so庫 我們能輕鬆的連線某個web站點。獲得某個首頁的html** 或者是http 請求的頭部。 還可以提交表單,

此外它還支援ftp,https,

/usr/include/curl/curl.h 中。

1 curlcode curl_global_init(long flags);

描述:

這個函式只能用一次。(其實在呼叫curl_global_cleanup 函式後仍然可再用)

如果這個函式在curl_easy_init函式呼叫時還沒呼叫,它講由libcurl庫自動完成。

引數:flags

curl_global_all    //初始化所有的可能的呼叫。

curl_global_ssl    //初始化支援 安全套接字層。

curl_global_win32  //初始化win32套接字型檔。

curl_global_nothing     //沒有額外的初始化。

2 void curl_global_cleanup(void);

描述:在結束libcurl使用的時候,用來對curl_global_init做的工作清理。類似於close的函式。

3 char *curl_version( );

描述: 列印當前libcurl庫的版本。

4 curl *curl_easy_init( );

描述:

curl_easy_init用來初始化乙個curl的指標(有些像返回file型別的指標一樣). 相應的在呼叫結束時要用curl_easy_cleanup函式清理.

一般curl_easy_init意味著乙個會話的開始. 它的返回值一般都用在easy系列的函式中.

5  void curl_easy_cleanup(curl *handle);

描述:

這個呼叫用來結束乙個會話.與curl_easy_init配合著用. 

引數:

curl型別的指標.

6  curlcode curl_easy_setopt(curl *handle, curloption option, parameter);

描述: 這個函式最重要了.幾乎所有的curl 程式都要頻繁的使用它.

它告訴curl庫.程式將有如何的行為. 比如要檢視乙個網頁的html**等.

(這個函式有些像ioctl函式)

引數:

1 curl型別的指標

2 各種curloption型別的選項.(都在curl.h庫里有定義,man 也可以檢視到)

3 parameter 這個引數 既可以是個函式的指標,也可以是某個物件的指標,也可以是個long型的變數.它用什麼這取決於第二個引數.

curloption 這個引數的取值很多.具體的可以檢視man手冊.

7 curlcode curl_easy_perform(curl *handle);

描述:這個函式在初始化curl型別的指標 以及curl_easy_setopt完成後呼叫. 就像字面的意思所說perform就像是個舞台.讓我們設定的

option 運作起來.

引數:

curl型別的指標.

下面來看乙個簡單的例子:

用來獲得某個主頁的html**

#include ;

#include ;

#include ;

int main(int argc, char *argv)

curl = curl_easy_init(); //初始化乙個curl型別的指標

if(curl!=null)

return 0;

}

編譯: gcc -o 001 -wall 001.c -lcurl

我們來獲得www.chinaunix.net 主頁的html**

./001 www.chinaunix.net

再來看乙個例子:

實際程式設計時 我們未必只顯示出來.我們的目的是要對獲得html**做相應的處理.比如檢驗關鍵字,發現重要資訊等等.

那麼我們就需要把獲得的html**存入相應的檔案中.看下面乙個例子

#include ;

#include ;

#include ;

#include ;

#include ;

#include ;

file *fp;  //定義file型別指標

size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)  //這個函式是為了符合curlopt_writefunction, 而構造的

int main(int argc, char *argv)

curl_easy_setopt(curl, curlopt_writefunction, write_data);  //curlopt_writefunction 將後繼的動作交給write_data函式處理

curl_easy_perform(curl);

curl_easy_cleanup(curl);

exit(0);

}

gcc -o 002 -wall 002.c -lcurl

./002 www.chinaunix.net

這個例子就將html**儲存在了www.chinaunix.net檔案中了.

#include ;

#include ;

#include ;

#include ;

struct ftpfile   //定義乙個結構為了傳遞給my_fwrite函式.可用curl_easy_setopt的curlopt_writedata選項傳遞

;int my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)

return fwrite(buffer, size, nmemb, out->;stream);

}int main(int argc, char *argv)

;  //初始化乙個ftpfile結構 

curl_global_init(curl_global_default);

curl = curl_easy_init();

if(curl)

if(ftpfile.stream)

fclose(ftpfile.stream);

curl_global_cleanup();

return 0;

}

說明:在gcc編譯的時候記得加上 -lcurl

Cmake使用例程

cmake使用例程如下 1 cmake工具需要核心支援sctp模組,需要安裝sctp開發包 lksctp tools 以及lksctp tools devel 2 在linux系統內安裝cmake 3 如何建立乙個包含多個源資料夾的工程 本文這裡以socket 通訊為例 1 新建以下資料夾 buil...

linux 執行緒 例程 使用方法

01 include 02 include 03 include 04 include sched setscheduler 0506 void thread void 07 22 23 int main void 24 33 34 return 0 35 gcc test.c lpthread i...

Qt例項程式如何使用

qt creator提供f1檢視reference documentation的目錄與qt5.7.0 examples qt 5.7目錄下條目一一對應。該目錄下是對應模組的例程,之前一致沒發現還有這個規律,記錄下以後方便學習查詢。model view 檢視 view 和資料分離,檢視用於顯示和編輯資...