c-curl
Curl in C/C++
編譯與安裝
- 編譯需要的原始檔可以在官網下載。
- 依照官網指示
1
2
3./configure
make
sudo make install使用
- #include <curl/curl.h>
- 依照官網指示
- 使用流程大致是這樣:
初始化>設定>執行>關閉
- 以 easy handle 來說,每個階段對應到的函式是
- (调用 curl_global_init() 初始化 libcurl)
- 初始化:
curl_easy_init()
- 設定:
curl_easy_setopt()
- 執行:
curl_easy_perform()
- 關閉:
curl_easy_cleanup()
(handler可以重複利用,全部使用完再清掉 handler 即可)
- 在設定中,有 3 個選項比較重要:
- CURLOPT_URL:要取得的 url 位址
- CURLOPT_WRITEFUNCTION:將接收資料的程式(的函式指標)
- CURLOPT_WRITEDATA:資料將存入的空間指標(也可以說是將傳入 write function 的最後一個參數的指標)
- 當程式執行完
curl_easy_perform()
後,我們就可以從 CURLOPT_WRITEDATA 所設定的指標中取得我們要從網路上取得的資料了。
- 當程式執行完
e.g.
1 | curl = curl_easy_init(); |
CURLcode curl_global_init(long flags)
- 这个函数只能用一次。(其实在调用curl_global_cleanup() 函数后仍然可再用),如果这个函数在curl_easy_init函数调用时还没调用,它讲由libcurl库自动完成。
- 參數
- CURL_GLOBAL_ALL //初始化所有的可能的调用。
- CURL_GLOBAL_SSL //初始化支持 安全套接字层。
- CURL_GLOBAL_WIN32 //初始化win32套接字库。
- CURL_GLOBAL_NOTHING //没有额外的初始化。
CURL *curl_easy_init( )
- 用来初始化一个CURL的指针(有些像返回FILE类型的指针一样). 相应的在调用结束时要用curl_easy_cleanup 函数清理。一般curl_easy_init意味着一个会话的开始. 它的返回值一般都用在easy系列的函数中.
curl_easy_perform
CURLcode curl_easy_perform(CURL *easy_handle);
- return
- CURLE_OK (0) means everything was ok, non-zero means an error occurred as <curl/curl.h> defines - see libcurl-errors.
- If the CURLOPT_ERRORBUFFER was set with curl_easy_setopt there will be a readable error message in the error buffer when non-zero is returned.
- CURLE_OK : 任务完成一切都好;
- CURLE_UNSUPPORTED_PROTOCOL:不支持的协议,由URL的头部指定;
- CURLE_COULDNT_CONNECT:不能连接到remote 主机或者代理;
- CURLE_REMOTE_ACCESS_DENIED:访问被拒绝;
- CURLE_HTTP_RETURNED_ERROR:Http返回错误;
- CURLE_READ_ERROR:读本地文件错误;2
- curl_easy_perform以阻塞方式执行整个请求。有关非阻塞行为,请参阅curl_multi_perform。
reference
- libcurl - curl_easy_perform()
void curl_easy_cleanup(CURL *handle)
- 用来结束一个会话.与curl_easy_init配合着用.
- 参数: CURL类型的指针.