• 大小: 2.85MB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2023-09-19
  • 语言: C/C++
  • 标签: CURL  C++  

资源简介

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个文件信息

评论

共有 条评论