curl簡單介紹

2021-04-14 02:32:13 字數 3436 閱讀 2324

關於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),這個單體類只是對http請求做了簡單封裝,提供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();}

int curlplus::writer(char *data, size_t size, size_t nmemb, string *writerdata)

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 函式介面和作用大致相同,所以如果有 ph...

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...