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