資源簡介
CURL C++封裝,功能包括:HTTP\HTTPS、POST、GET、表單提交、文件下載、UTF-8轉碼、說明文檔

代碼片段和文件信息
//?Clib_network.cpp?:?定義?DLL?應用程序的導出函數。
//
#include?“stdafx.h“
#include?“Clib_network.h“
#include?“curl.h“
#include?“easy.h“
#pragma?comment(lib“curllib.lib“)
#pragma?comment(lib“curllib_static.lib“)
/*
* https://curl.haxx.se/libcurl/c/
*
* curl_global_init 初始化libcurl在多線程下主動調用,防止在線程中curl_easy_init時多次調用
* curl_global_cleanup 對curl_global_init做的工作清理
* curl_easy_init 初始化一個CURL的指針,意味著一個會話的開始
* curl_easy_setopt 設置傳輸選項
* curl_easy_perform 函數完成傳輸任務
* curl_easy_cleanup 釋放內存
*
*
* curl_easy_setopt?參數大致說明:
*
* CURLOPT_URL 設置URL
* CURLOPT_WRITEFUNCTION 設置寫函數,liburl接收到數據后被調用
* CURLOPT_WRITEDATA 寫函數中stream指針的來源
* CURLOPT_READFUNCTION 這是讀函數,liburl需要讀取數據傳遞給遠程主機
* CURLOPT_READDATA 讀函數中stream指針的來源
* CURLOPT_PROGRESSFUNCTION 下載進度,每秒被libcurl調用一次,CURLOPT_NOPROGRESS必須設置false
* CURLOPT_PROGRESSDATA 參數將作為CURLOPT_PROGRESSFUNCTION指定函數的第一個參數
*
* CURLOPT_CONNECTIONTIMEOUT 設置連接等待時間,不設置默認無限等等
* CURLOPT_TIMEOUT 設置傳輸時間,不設置默認無限等等
*
* CURLOPT_FOLLOWLOCATION 設置重定位URL
*
*
* curl_formadd 增加網頁表單
* curl_formfree 釋放網頁表單
*
* CURLFORM_COPYNAME 表單項名稱
* CURLFORM_FILE 表單項為文件 后跟文件路徑
* CURLFORM_COPYCONTENTS 表單項為文本 后跟文本內容
* CURLFORM_END 表單項結束
*
*
* 注:絕對不應該在線程之間共享同一個libcurl?handle,一個線程每次只能使用一個handle
* libcurl是線程安全的,但有兩點例外:信號(signals)和SSL/TLS?handler
*/
namespace?_CURL_
{??
static?size_t?write_data(void?*buf?size_t?unit?size_t?bufSize?std::string?*?data)?
{
if?(data?!=?NULL)
{
int?size?=?unit?*?bufSize;
char?*?tmp?=?(char*)malloc(size?+?1);
memcpy(tmp?buf?size);
tmp[size]?=?‘\0‘;
data->append(tmp);
free(tmp);
return?size;
}
else
return?0;
}
static?size_t?write_file(void?*buf?size_t?unit?size_t?bufSize?void?*?data)?
{
Clib_network*?pthis?=?(Clib_network*)data;
if?(pthis?!=?NULL)
{
if(pthis->m_bStop) //?使下載停止
return?0;
int?size?=?unit?*?bufSize;
DWORD?dwWritten?=?0;
if?(!WriteFile(pthis->m_hFile?buf?size?&dwWritten?NULL))??
return?0;
return?size;
}
else
return?0;
}
#define?SEP??“\t“??/*?Tab?separates?the?fields?*/
char?*my_cookie?=
“example.com“????/*?Hostname?*/
SEP?“FALSE“??????/*?Include?subdomains?*/
SEP?“/“??????????/*?Path?*/
SEP?“FALSE“??????/*?Secure?*/
SEP?“0“??????????/*?Expiry?in?epoch?time?format.?0?==?Session?*/
SEP?“foo“????????/*?Name?*/
SEP?“bar“;???????/*?Value?*/
class?CurlIntelligence
{
public:
CurlIntelligence()
{
curl_global_init(CURL_GLOBAL_ALL); //唯一只被調用一次,初始化所有的可能的調用
}
~CurlIntelligence()
{
curl_global_cleanup();
}
};
}
_CURL_::CurlIntelligence?g_curl;
Clib_network::Clib_network()
:m_pCallbackParam(NULL)
m_pCallback(NULL)
m_bStop(false)
m_hFile(NULL)
{
return;
}
Clib_network::~Clib_network()
{
return;
}
std::string?Clib_network::GetError(int?nCode)
{
std::string?strErr?=?““;
if?(nCode?==?-1)
strErr?=?“Curllib?handle?is?NULL“;
else
strErr?=?curl_easy_st
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-08-02?17:37??curl\
?????目錄???????????0??2017-08-02?17:37??curl\Clib_network\
?????文件???????14204??2017-07-27?15:41??curl\Clib_network\Clib_network.cpp
?????文件????????3911??2017-07-27?15:10??curl\Clib_network\Clib_network.h
?????文件????????5327??2017-07-26?11:32??curl\Clib_network\Clib_network.vcxproj
?????文件????????1501??2017-07-26?11:17??curl\Clib_network\Clib_network.vcxproj.filters
?????文件?????????143??2017-07-26?11:17??curl\Clib_network\Clib_network.vcxproj.user
?????文件????????1566??2017-07-26?11:17??curl\Clib_network\ReadMe.txt
?????文件?????????389??2017-07-26?11:17??curl\Clib_network\dllmain.cpp
?????文件?????????217??2017-07-26?11:17??curl\Clib_network\stdafx.cpp
?????文件?????????318??2017-07-26?11:17??curl\Clib_network\stdafx.h
?????文件?????????236??2017-07-26?11:17??curl\Clib_network\targetver.h
?????目錄???????????0??2017-08-02?17:37??curl\curl\
?????目錄???????????0??2017-08-02?17:37??curl\curl\include\
?????文件???????85577??2017-05-31?02:07??curl\curl\include\curl.h
?????文件???????22273??2017-05-31?02:07??curl\curl\include\curlbuild.h
?????文件????????8934??2017-05-31?02:07??curl\curl\include\curlrules.h
?????文件????????2741??2017-05-31?02:07??curl\curl\include\curlver.h
?????文件????????3472??2017-05-31?02:07??curl\curl\include\easy.h
?????文件????????2788??2017-05-31?02:07??curl\curl\include\mprintf.h
?????文件???????14813??2017-05-31?02:07??curl\curl\include\multi.h
?????文件????????1330??2017-05-31?02:07??curl\curl\include\stdcheaders.h
?????文件???????37318??2017-05-31?02:07??curl\curl\include\typecheck-gcc.h
?????目錄???????????0??2017-08-02?17:37??curl\curl\lib\
?????目錄???????????0??2017-08-02?17:37??curl\curl\lib\Debug\
?????文件??????304640??2017-04-26?09:35??curl\curl\lib\Debug\curllib.dll
?????文件???????13694??2017-04-26?09:35??curl\curl\lib\Debug\curllib.lib
?????文件?????1774420??2017-04-26?09:35??curl\curl\lib\Debug\curllib_static.lib
?????文件??????214528??2017-04-26?09:35??curl\curl\lib\Debug\libsasl.dll
?????文件??????110592??2017-04-26?09:35??curl\curl\lib\Debug\openldap.dll
?????文件???????23142??2017-04-26?09:35??curl\curl\lib\Debug\qiniu.lib
............此處省略13個文件信息
評論
共有 條評論