curl簡單介紹

2021-05-01 10:50:20 字數 4033 閱讀 6697

關於

curl

的介紹很多,這裡不詳細介紹,主要談一下簡單應用。

最近研究了一下

linux

下的curl c api

,最新版本為

7.17

,curl c api

的文件比較豐富,唯一就是查詢起來,費些時間。

curl

的c api

和curl

的php api

,函式介面和作用大致相同,所以如果有

php api

使用經驗應該很好理解。 基於

curl

的c api

寫了乙個擴充套件

c++ singleton

類(當然

curl

也有c++ api

),這個單體類只是對

請求做了簡單封裝,提供

post

,get

方法,並得到請求

url內的返回值(儲存到

string

物件中),也很容易擴充套件到其他協議上去。

curlplus.h檔案

#ifndef _curlplus_h__

#define _curlplus_h__

#ifndef __curl_curl_h

#include

#endif

#ifndef __curl_easy_h

#include

#endif

#include

#include

using namespace::std;

namespace cp;}

#endif

curlpuls.cc檔案

#ifndef spivot_curlplus_h__

#include "curlplus.h"

#endif

using namespace std;

using namespace cp;

auto_ptrcurlplus::_instance;

string curlplus::buffer;

static char errorbuffer[curl_error_size];

curlplus& curlplus::get_instance() 

return *_instance.get();}

return len;}

curlplus::curlplus(void)

}curlplus::~curlplus(void)

string curlplus::post(const string& url, const string& content) const

_setcurlopt(curl,url);

curl_easy_setopt(curl, curlopt_post, 1 );

curl_easy_setopt(curl, curlopt_postfields, content.c_str());   

curlcode code = curl_easy_perform(curl);

if(code != curle_ok)

curl_easy_cleanup(curl);

return buffer;}

string curlplus::get(const string& url) const

_setcurlopt(curl,url);

curlcode code = curl_easy_perform(curl); 

if(code != curle_ok)

curl_easy_cleanup(curl);

return buffer;}

void curlplus::_setcurlopt(curl *curl,const string& url) const

這裡有幾個需要注意的地方

1:curlcode curl_global_init(long flags);函式,這個函式全域性需要呼叫一次(多次呼叫也可以,不過沒有必要), 所以這也是把curlplus設計成單體類的原因,curl_global_init函式在其他libcurl函式呼叫前至少呼叫一次,程式最後需要呼叫curl_global_cleanup,進行清理。

引數:flags

curl_global_all

initialize everything possible. this sets all known bits.

curl_global_ssl

initialize ssl

curl_global_win32

initialize the win32 socket libraries.

curl_global_nothing

initialise nothing extra. this sets no bit.

curlcode

是乙個enum

,當curlcode

為curle_ok

時,表示函式執行成功,否則失敗,具體錯誤原因可以檢視

檔案內的定義。2:

curl_easy_init - start a libcurl easy session

curl_easy_init

用來初始化乙個

curl

的指標(

有些像返回

file

型別的指標一樣

). 相應的在呼叫結束時要用

curl_easy_cleanup

函式清理

. 一般

curl_easy_init

意味著乙個會話的開始

. 它的返回值是

curl *

,curl_easy_init

函式是執行緒相關的,也就是說不能在乙個執行緒中呼叫另外乙個執行緒通過

curl_easy_init

建立的curl

指標。3

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

描述:

這個函式最重要了

.幾乎所有的

curl

程式都要頻繁的使用它

.它告訴

curl庫.

程式將有如何的行為

. 比如要檢視乙個網頁的

html

**等.

,要想具體了解

curl

的行為,必須對

curloption

有足夠的了解,具體可以參考

這裡有兩個型別不易理解

curlopt_writefunction

,curlopt_writedata

curl_easy_setopt(curl, curlopt_writefunction, curlplus::writer);

設定乙個**函式,這個**函式的格式是

size_t function( void *ptr, size_t size, size_t nmemb, void *stream);

ptr,

返回資料的指標

size,

返回資料每塊的大小

nmemb,

返回資料的塊數(這裡返回資料串的真正大小為

size*nmemb

)stream

,是curl_easy_setopt(curl, curlopt_writedata, &buffer);

中的buffer的指標。 4

:curlcode curl_easy_perform(curl *handle);

執行遠端請求

參考資料

curl簡單介紹

關於curl的介紹很多,這裡不詳細介紹,主要談一下簡單應用。最近研究了一下linux下的curl c api,最新版本為7.17,curl c api的文件比較豐富,唯一就是查詢起來,費些時間。curl的c api和curl的php api,函式介面和作用大致相同,所以如果有php api使用經驗應...

curl 簡單介紹

前段時間學習linux命令,偶然發現curl命令很有用。這裡簡單介紹下。網路上部分解析是 curl是乙個利用url語法在命令列方式下工作的檔案傳輸工具。來看下簡單的使用 1.檢視響應的頭 curl i現在正如robbin說的可以看下x runtime 0.47101 2.在學校要 才可以上iteye...

curl使用介紹

一 linux curl用法舉例 1.linux curl抓取網頁 2.linux curl使用 linux curl使用http 抓取頁面 curl x 111.95.243.36 80 fgb2312 curl x 111.95.243.36 80 u aiezu password 使用sock...