libcurl 的初步使用

来源:互联网 发布:法律法规数据库系统 编辑:程序博客网 时间:2024/05/17 22:30
一、libcurl的http使用
1.libcurl全局初始化与反初始化
初始化:
CURL_EXTERN CURLcode curl_global_init(long flags);
反初始化:
CURL_EXTERN void curl_global_cleanup(void);

curl_global_init(CURL_GLOBAL_ALL);
curl_global_cleanup( );

这是全局初始化函数,并不是线程安全的,只能全局调用一次。

2.libcurl初始化与反初始化
CURL_EXTERN CURL *curl_easy_init(void);
CURL_EXTERN void curl_easy_cleanup(CURL *curl);

局部初始化,可以多次调用。

3.设置CURL指针的属性
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);

4.执行CURL请求
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);


5.具体的调用流程:
        (1)全局初始化(仅一次):curl_global_init(CURL_GLOBAL_ALL);
        (2)局部初始化:curl_easy_init( );
        (3)设置CURL属性:curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);
        (4)执行请求:curl_easy_perform(m_lpCurl);
        (5)局部反初始化:curl_easy_cleanup(m_lpCurl);
        (6)全局反初始化:curl_global_cleanup( );


6.基本的http属性字段的设置:

   (1).设置本次连接的等待时间,仅仅是HTTP连接   
   crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CONNECTTIMEOUT, u32WaitTime);

   (2)设置URL地址
    crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);

   (3)设置http的头回调函数
    crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERFUNCTION, HeadCallBack );

   (4)设置头回调函数的上下文指针
    crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERDATA, this );

   (5)设置请求方式为post
    crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POST, 1L);

   (6)设置post所携带的数据
    crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POSTFIELDS, lpInBuffer);

   (7)设置post数据的大小
    crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POSTFIELDSIZE, u32InSize);

   (8))设置http请求的返回数据的回调函数的上下文指针
    crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEDATA, (void*)m_lpBody);

   (9)设置http请求的返回数据的回调函数,body数据的回调
    crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEFUNCTION, BodyCallBack); //回调http的响应数据

7.https相关属性设置
(1)设置SSL证书的路径
  crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CAINFO, s8KeyPathString);

(2)设置是否验证SSL证书
crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSL_VERIFYPEER, TRUE);

(3)设置SSL证书版本
crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSLVERSION , CURL_SSLVERSION_TLSv1_1);

(4)设置是否验证host的证书
crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSL_VERIFYHOST, FALSE);

(5)设置用户名密码
crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_USERPWD, s8Param);

(6)设置认证方式为DIGEST
crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPAUTH, (long)CURLAUTH_DIGEST);

(7)设置验证方式BASIC
crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPAUTH, (long)CURLAUTH_BASIC);

(8)加入curl的标示头
crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_USERAGENT, "curl/7.47.1");

(9)设置XHASH,CHASH,XHASH等属性值
lpCurlList = curl_slist_append(lpCurlList, GetSHash( ));
lpCurlList = curl_slist_append(lpCurlList, GetCHash( ));
lpCurlList = curl_slist_append(lpCurlList, GetXHash( ));
curl_easy_setopt(m_lpCurl, CURLOPT_HTTPHEADER, lpCurlList);

8.上传文件相关设置
(1)设置上传的文件路径
struct curl_httppost *post = NULL;
struct curl_httppost *last = NULL;
eFormRet = curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, lpInBuffer, CURLFORM_END) ;

9.代码示例:
头文件(头文件还需要包含CURL的头文件这里不列举):
#ifndef _I8H_HTTP_H#define _I8H_HTTP_H#include <string.h>#include "curl.h"#ifndef VOIDtypedef void VOID;#endif#ifndef U64typedef unsigned long long U64 ;#endif#ifndef U32typedef unsigned int U32;#endif#ifndef U16typedef unsigned short U16 ;#endif#ifndef U8typedef unsigned char U8 ;#endif#ifndef S32typedef int S32;#endif#ifndef S16typedef short S16 ;#endif#ifndef S8typedef char S8 ;#endif#ifndef TRUE#define TRUE  1#endif#ifndef FALSE#define FALSE  0#endif#define MAX_HASH_CODE_LEN 64#define I8H_ERROR_CODE_NOERROR 0//!没有错误#define I8H_ERROR_CODE_FAIL1       //!失败#define I8H_ERROR_CODE_PASSWORD_ERROR 2//!用户名密码错误#define I8H_ERROR_CODE_NOENOUGHPRI 3//!权限不足#define I8H_ERROR_CODE_NOINIT 4//!没有初始化#define I8H_ERROR_CODE_HASINIT      5//!已经初始化#define I8H_ERROR_CODE_ORDER_ERROR6//!调用次序错误#define I8H_ERROR_CODE_PARAMETER_ERROR 7        //!参数错误#define I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR8        //!资源分配错误#define I8H_ERROR_CODE_CALL3THAPI_ERROR9//!调用第三方接口错误#define I8H_ERROR_CODE_CHAN_ERROR 10//!通道号错误#define I8H_ERROR_CODE_CHAN_NOTSUPPORT               <span style="white-space:pre"></span>11 //!通道不支持该操作#define I8H_ERROR_CODE_OVER_MAXLINK 12//!连接到DVR的客户端个数超过最大#define I8H_ERROR_CODE_VERSIONNOMATCH13//!版本不匹配#define I8H_ERROR_CODE_NETWORK_FAIL14      //!网络错误(包括连接 发送 接收等错误)#define I8H_ERROR_CODE_OPENFILE_FAIL15      //!打开文件出错#define I8H_ERROR_CODE_UPGRADE_FAIL16      //!DVR升级失败#define I8H_ERROR_CODE_DATASERIALIZE_FAIL17//!数据序列化错误#define I8H_ERROR_CODE_DATADESERIALIZE_FAIL18//!数据反序列化错误#define I8H_ERROR_CODE_NOENOUGH_BUF19//!缓冲区太小#define I8H_ERROR_CODE_USERNOTEXIST20//!用户不存在#define I8H_ERROR_CODE_COMMAND_UNSUPPORT21//!命令不支持#define I8H_ERROR_CODE_INVALID_HANDLE22      //!无效句柄#define I8H_ERROR_CODE_SERVER_FORBIDDEN23     //!服务禁止#define I8H_ERROR_CODE_CONNECT_SSL_ERROR24     //!SSL连接错误#define UTILITY_FREE_POINT(x)\{\if (NULL != x)\{\delete x;\x = NULL;\}\}//!检查并释放数组#define UTILITY_FREE_ARRAY(x)\{\if (NULL != x)\{\delete[] x;\x = NULL;\}\}#define UTILITY_CLEAN_ARRAY(x, size)\{\if(NULL != x)\{\memset(x, 0, size) ;\}\}#define UTILITY_COPY_ARRAY(x, y, size)\{\if(NULL != (x) && NULL != (y))\{\memcpy((x), (y), size) ;\}\}typedef struct _tagHttpHead{U16 u16ResultCode ;U16 u16DataType ;}HttpHead ;typedef struct _tagHttpBody{S8* lpBuffer;U8  u8Full;U32 u32Offset;U32 u32TotalSize;}HttpBody;namespace HTTPSDK{class CHttpSession{public:CHttpSession( ) ;~CHttpSession( ) ;S8 *GetUserName( ) ;S8 *GetPassword( ) ;S8 *GetSHash( );S8 *GetCHash( );S8 *GetXHash( );VOID SetUser(S8 *lpUserName, S8 *lpPassword) ;VOID SetHashCode(const S8* lpSHash, const S8* lpCHash, const S8* lpXHash);S32 OnGetRequest(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time);S32 OnPostRequest(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time);S32 OnRequest4Https(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time, VOID* lpUser, U32 u32Type);S32 OnHeartBeatRequest(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time);S32 OnUpload(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time);S32 OnUpload4Https(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time);static size_t BodyCallBack(void *buffer, size_t size, size_t nmemb, void *stream);static size_t HeadCallBack(void *buffer, size_t size, size_t nmemb, void *stream);static VOID SafeCopyString(const S8 *lpSrc, S8 *lpDest, S32 DestLen) ;private:CHttpSession(const CHttpSession&){ }CHttpSession& operator=(const CHttpSession&){return (*this);}private:CURL* m_lpCurl ;HttpHead *m_lpHead ;HttpBody *m_lpBody ;S8  m_s8UserName[32] ;S8  m_s8Password[16] ;S8 m_s8SHash[MAX_HASH_CODE_LEN];S8 m_s8XHash[MAX_HASH_CODE_LEN];S8 m_s8CHash[MAX_HASH_CODE_LEN];};}#endif

源文件:
#include "I8H_Http.h"extern S8 s8KeyPathString[256];namespace HTTPSDK{CHttpSession::CHttpSession( ):m_lpCurl(NULL),m_lpHead(NULL),m_lpBody(NULL){UTILITY_CLEAN_ARRAY(m_s8UserName, sizeof(m_s8UserName));UTILITY_CLEAN_ARRAY(m_s8Password, sizeof(m_s8Password));UTILITY_CLEAN_ARRAY(m_s8SHash, sizeof(m_s8SHash));UTILITY_CLEAN_ARRAY(m_s8XHash, sizeof(m_s8XHash));UTILITY_CLEAN_ARRAY(m_s8CHash, sizeof(m_s8CHash));}CHttpSession::~CHttpSession( ){UTILITY_FREE_POINT(m_lpHead);if(m_lpBody != NULL){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);}UTILITY_FREE_POINT(m_lpBody) ;}S8 *CHttpSession::GetUserName( ){return m_s8UserName ;}S8 *CHttpSession::GetPassword( ){return m_s8Password ;}VOID CHttpSession::SetUser(S8 *lpUserName, S8 *lpPassword){CHttpSession::SafeCopyString(lpUserName, m_s8UserName, sizeof(m_s8UserName)) ;CHttpSession::SafeCopyString(lpPassword, m_s8Password, sizeof(m_s8Password)) ;}S8 * CHttpSession::GetSHash(){return m_s8SHash;}S8 * CHttpSession::GetCHash(){return m_s8CHash;}S8 * CHttpSession::GetXHash(){return m_s8XHash;}VOID CHttpSession::SetHashCode(const S8* lpSHash, const S8* lpCHash, const S8* lpXHash){if(lpSHash != NULL){CHttpSession::SafeCopyString(lpSHash, m_s8SHash, sizeof(m_s8SHash));}if(lpCHash != NULL){CHttpSession::SafeCopyString(lpCHash, m_s8CHash, sizeof(m_s8CHash));}if(lpXHash != NULL){CHttpSession::SafeCopyString(lpXHash, m_s8XHash, sizeof(m_s8XHash));}}VOID CHttpSession::SafeCopyString(const S8 *lpSrc, S8 *lpDest, S32 DestLen){S32 SrcLen = 0 ;if(lpSrc == NULL || lpDest == NULL){return ;}SrcLen = (S32)strlen(lpSrc) ;if(SrcLen >= DestLen){memcpy(lpDest, lpSrc, DestLen - 1) ;lpDest[DestLen - 1] = '\0' ;}else{if(SrcLen >= 1){strcpy(lpDest, lpSrc) ;}else{memset(lpDest, 0, DestLen) ;}}}S32 CHttpSession::OnGetRequest(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time){U32 u32WaitTime = 0;U32 u32TryTimes = 0;CURLcode crulCode = CURLE_OK;if(lpUrl == NULL || lpHeader == NULL || lpInBuffer == NULL || lpOutBuffer == NULL || u32InSize <= 0 || u32Time <= 0 || u32OutSize == NULL){return I8H_ERROR_CODE_PARAMETER_ERROR;}m_lpHead = new HttpHead;m_lpBody = new HttpBody;if(m_lpHead == NULL || m_lpBody == NULL){UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}memset(m_lpHead, 0, sizeof(HttpHead));memset(m_lpBody, 0, sizeof(HttpBody));u32WaitTime  = (u32Time >> 16) & 0xFFFF;u32TryTimes = u32Time & 0xFFFF;m_lpBody->u32TotalSize = 1024*1024;m_lpCurl = curl_easy_init( );if(m_lpCurl == NULL ){return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}m_lpBody->lpBuffer = new S8[m_lpBody->u32TotalSize];if(m_lpBody->lpBuffer == NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}memset(m_lpBody->lpBuffer, 0, m_lpBody->u32TotalSize* sizeof(S8));crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CONNECTTIMEOUT, u32WaitTime);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_FRESH_CONNECT, TRUE);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERFUNCTION, HeadCallBack );if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERDATA, this );if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEDATA, (void*)m_lpBody);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEFUNCTION, BodyCallBack); //回调http的响应数据if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}while(u32TryTimes){crulCode = curl_easy_perform(m_lpCurl);if(crulCode == CURLE_OK){break;}else{u32TryTimes--;}}if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}if(m_lpBody->u8Full == 1){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_NOENOUGH_BUF;}if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(m_lpHead->u16ResultCode == 404){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_COMMAND_UNSUPPORT;}else{*lpOutBuffer = m_lpBody->lpBuffer;*u32OutSize = m_lpBody->u32Offset;if (m_lpHead->u16ResultCode == 200){return I8H_ERROR_CODE_NOERROR;}return I8H_ERROR_CODE_COMMAND_UNSUPPORT;}}S32 CHttpSession::OnPostRequest(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time){U32 u32WaitTime = 0;U32 u32TryTimes = 0;CURLcode crulCode = CURLE_OK;if(lpUrl == NULL || lpHeader == NULL || lpInBuffer == NULL || lpOutBuffer == NULL || u32InSize <= 0 || u32Time <= 0 || u32OutSize == NULL){return I8H_ERROR_CODE_PARAMETER_ERROR;}m_lpHead = new HttpHead;m_lpBody = new HttpBody;if(m_lpHead == NULL || m_lpBody == NULL){UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}memset(m_lpHead, 0, sizeof(HttpHead));memset(m_lpBody, 0, sizeof(HttpBody));u32WaitTime  = (u32Time >> 16) & 0xFFFF;u32TryTimes = u32Time & 0xFFFF;m_lpBody->u32TotalSize = 1024*1024;m_lpCurl = curl_easy_init( );if(m_lpCurl == NULL ){return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}m_lpBody->lpBuffer = new S8[m_lpBody->u32TotalSize];if(m_lpBody->lpBuffer == NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}memset(m_lpBody->lpBuffer, 0, m_lpBody->u32TotalSize* sizeof(S8));crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CONNECTTIMEOUT, u32WaitTime);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_FRESH_CONNECT, TRUE);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERFUNCTION, HeadCallBack );if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERDATA, this );if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POST, 1L);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POSTFIELDS, lpInBuffer);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POSTFIELDSIZE, u32InSize);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEDATA, (void*)m_lpBody);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEFUNCTION, BodyCallBack); //回调http的响应数据if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}while(u32TryTimes){crulCode = curl_easy_perform(m_lpCurl);if(crulCode == CURLE_OK){break;}else{u32TryTimes--;}}if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}if(m_lpBody->u8Full == 1){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_NOENOUGH_BUF;}if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(m_lpHead->u16ResultCode == 404){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_COMMAND_UNSUPPORT;}else{*lpOutBuffer = m_lpBody->lpBuffer;*u32OutSize = m_lpBody->u32Offset;if (m_lpHead->u16ResultCode == 200){return I8H_ERROR_CODE_NOERROR;}return I8H_ERROR_CODE_COMMAND_UNSUPPORT;}}S32 CHttpSession::OnRequest4Https(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time, VOID* lpUser, U32 u32Type){U32 u32WaitTime = 0;U32 u32TryTimes = 0;S8 s8Param[128]={0};char* lpDigest = strstr(lpUrl,"/digest/");char* lpBasic = strstr(lpUrl,"/basic/");CURLcode crulCode = CURLE_OK;struct curl_slist *lpCurlList = NULL;if(lpUrl == NULL  || lpHeader == NULL || lpInBuffer == NULL || lpOutBuffer == NULL || u32InSize < 0 || u32Time <= 0 || u32OutSize == NULL ){return I8H_ERROR_CODE_PARAMETER_ERROR;}if(lpDigest != NULL && lpBasic != NULL){return I8H_ERROR_CODE_PARAMETER_ERROR;}m_lpHead = new HttpHead;m_lpBody = new HttpBody;if(m_lpHead == NULL || m_lpBody == NULL){UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}memset(m_lpHead, 0, sizeof(HttpHead));memset(m_lpBody, 0, sizeof(HttpBody));u32WaitTime  = (u32Time >> 16) & 0xFFFF;u32TryTimes = u32Time & 0xFFFF;m_lpBody->u32TotalSize = 1024*1024;m_lpCurl = curl_easy_init( );if(m_lpCurl == NULL ){return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}m_lpBody->lpBuffer = new S8[m_lpBody->u32TotalSize];if(m_lpBody->lpBuffer == NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}memset(m_lpBody->lpBuffer, 0, m_lpBody->u32TotalSize* sizeof(S8));crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CONNECTTIMEOUT, u32WaitTime);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_FRESH_CONNECT, TRUE);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERFUNCTION, HeadCallBack );if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERDATA, this);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}if(u32Type != 0){crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POST, 1L);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POSTFIELDS, lpInBuffer);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_POSTFIELDSIZE, u32InSize);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEDATA, (void*)m_lpBody);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEFUNCTION, BodyCallBack); //回调http的响应数据if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CAINFO, s8KeyPathString);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSL_VERIFYPEER, TRUE);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSLVERSION , CURL_SSLVERSION_TLSv1_1);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSL_VERIFYHOST, FALSE);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}sprintf(s8Param, "%s:%s", GetUserName(), GetPassword());crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_USERPWD, s8Param);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}if(lpDigest != NULL){crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPAUTH, (long)CURLAUTH_DIGEST);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}}if(lpBasic!= NULL){crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPAUTH, (long)CURLAUTH_BASIC);if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_USERAGENT, "curl/7.47.1");if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}if((strlen(GetSHash( )) != 0) && (strlen(GetCHash( )) != 0) && (strlen(GetXHash( )) != 0)){lpCurlList = curl_slist_append(lpCurlList, GetSHash( ));lpCurlList = curl_slist_append(lpCurlList, GetCHash( ));lpCurlList = curl_slist_append(lpCurlList, GetXHash( ));curl_easy_setopt(m_lpCurl, CURLOPT_HTTPHEADER, lpCurlList);}while(u32TryTimes){crulCode = curl_easy_perform(m_lpCurl);if(crulCode == CURLE_OK){break;}else{u32TryTimes--;}}if(lpCurlList != NULL){curl_slist_free_all(lpCurlList);}if(crulCode != CURLE_OK){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(crulCode  == CURLE_SSL_CONNECT_ERROR){return I8H_ERROR_CODE_CONNECT_SSL_ERROR;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}if(m_lpBody->u8Full == 1){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_NOENOUGH_BUF;}if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(m_lpHead->u16ResultCode == 404){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_COMMAND_UNSUPPORT;}else if(m_lpHead->u16ResultCode == 403){UTILITY_FREE_ARRAY(m_lpBody->lpBuffer);UTILITY_FREE_POINT(m_lpHead);UTILITY_FREE_POINT(m_lpBody);return I8H_ERROR_CODE_SERVER_FORBIDDEN;}else{if(m_lpHead->u16ResultCode == 200){}*lpOutBuffer = m_lpBody->lpBuffer;*u32OutSize = m_lpBody->u32Offset;return I8H_ERROR_CODE_NOERROR;}}S32 CHttpSession::OnHeartBeatRequest(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time){U32 u32WaitTime = 0;CURLcode crulCode = CURLE_OK;if(lpUrl == NULL || lpHeader == NULL || lpInBuffer == NULL || lpOutBuffer == NULL || u32InSize <= 0 || u32Time <= 0 || u32OutSize == NULL){return I8H_ERROR_CODE_PARAMETER_ERROR;}m_lpHead = new HttpHead;if(m_lpHead == NULL){UTILITY_FREE_POINT(m_lpHead);return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}memset(m_lpHead, 0, sizeof(HttpHead));u32WaitTime  = (u32Time >> 16) & 0xFFFF;m_lpCurl = curl_easy_init( );if(m_lpCurl == NULL ){return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CONNECTTIMEOUT, u32WaitTime);if(crulCode != CURLE_OK){UTILITY_FREE_POINT(m_lpHead);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);if(crulCode != CURLE_OK){UTILITY_FREE_POINT(m_lpHead);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERFUNCTION, HeadCallBack );if(crulCode != CURLE_OK){UTILITY_FREE_POINT(m_lpHead);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt( m_lpCurl, CURLOPT_HEADERDATA, this );if(crulCode != CURLE_OK){UTILITY_FREE_POINT(m_lpHead);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_WRITEFUNCTION, BodyCallBack); //回调http的响应数据if(crulCode != CURLE_OK){UTILITY_FREE_POINT(m_lpHead);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_perform(m_lpCurl);UTILITY_FREE_POINT(m_lpHead);if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(crulCode != CURLE_OK){return I8H_ERROR_CODE_CALL3THAPI_ERROR;}else{return I8H_ERROR_CODE_NOERROR;}}S32 CHttpSession::OnUpload4Https(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time){U32 u32WaitTime = 0;CURLcode crulCode = CURLE_OK;CURLFORMcode eFormRet = CURL_FORMADD_OK;struct curl_httppost *post = NULL;struct curl_httppost *last = NULL;struct curl_slist *headers = NULL;if(lpUrl == NULL || lpHeader == NULL || lpInBuffer == NULL || lpOutBuffer == NULL || u32InSize <= 0 || u32Time <= 0 || u32OutSize == NULL){return I8H_ERROR_CODE_PARAMETER_ERROR;}u32WaitTime  = (u32Time >> 16) & 0xFFFF;m_lpCurl = curl_easy_init( );if(m_lpCurl == NULL ){return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}headers = curl_slist_append(headers, "Expect:");crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPHEADER, headers);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_VERBOSE, 1);crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CAINFO, s8KeyPathString);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSL_VERIFYPEER, TRUE);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_SSL_VERIFYHOST, FALSE);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}eFormRet = curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, lpInBuffer, CURLFORM_END) ;if(eFormRet != CURL_FORMADD_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPPOST, post);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CONNECTTIMEOUT, u32WaitTime);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_perform(m_lpCurl);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}*lpOutBuffer = NULL;*u32OutSize = 0;if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(post != NULL){curl_formfree(post);}if(headers != NULL){curl_slist_free_all(headers);}return I8H_ERROR_CODE_NOERROR;}S32 CHttpSession::OnUpload(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time){U32 u32WaitTime = 0;CURLcode crulCode = CURLE_OK;CURLFORMcode eFormRet = CURL_FORMADD_OK;struct curl_httppost *post = NULL;struct curl_httppost *last = NULL;struct curl_slist *headers = NULL;if(lpUrl == NULL || lpHeader == NULL || lpInBuffer == NULL || lpOutBuffer == NULL || u32InSize <= 0 || u32Time <= 0 || u32OutSize == NULL){return I8H_ERROR_CODE_PARAMETER_ERROR;}u32WaitTime  = (u32Time >> 16) & 0xFFFF;m_lpCurl = curl_easy_init( );if(m_lpCurl == NULL ){return I8H_ERROR_CODE_ALLOC_RESOURCE_ERROR;}headers = curl_slist_append(headers, "Expect:");headers = curl_slist_append(headers,"Cookie:s_browsertype=1;");crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPHEADER, headers);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_VERBOSE, 1);eFormRet = curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, lpInBuffer, CURLFORM_END) ;if(eFormRet != CURL_FORMADD_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_URL, lpUrl);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_HTTPPOST, post);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_setopt(m_lpCurl, CURLOPT_CONNECTTIMEOUT, u32WaitTime);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}crulCode = curl_easy_perform(m_lpCurl);if(crulCode != CURLE_OK){if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_CALL3THAPI_ERROR;}*lpOutBuffer = NULL;*u32OutSize = 0;if(m_lpCurl != NULL){curl_easy_cleanup(m_lpCurl);m_lpCurl = NULL;}if(headers != NULL){curl_slist_free_all(headers);}if(post != NULL){curl_formfree(post);}return I8H_ERROR_CODE_NOERROR;}size_t CHttpSession::HeadCallBack(void *buffer, size_t size, size_t nmemb, void *userp){    printf("\r\n HeadCallBack:buffer: %s\r\n", (char*)buffer);int retCode = 0 ;char* lpSrc = NULL;CHttpSession* lpHttp  = (CHttpSession*)userp;int ret = sscanf((char*)buffer,"HTTP/1.%*c %3d",&retCode);if(ret){lpHttp->m_lpHead->u16ResultCode = retCode;}if((lpSrc = strstr((char*)buffer,"S-HASH")) != NULL){CHttpSession::SafeCopyString(lpSrc, lpHttp->m_s8SHash, (S32)strlen(lpSrc) );}else if((lpSrc = strstr((char*)buffer,"C-HASH")) != NULL){CHttpSession::SafeCopyString(lpSrc, lpHttp->m_s8CHash, (S32)strlen(lpSrc));}else if((lpSrc = strstr((char*)buffer,"X-HASH")) != NULL){CHttpSession::SafeCopyString(lpSrc, lpHttp->m_s8XHash, (S32)strlen(lpSrc));}return size * nmemb;}size_t CHttpSession::BodyCallBack(void *ptr, size_t size, size_t nmemb, void *stream){    printf("\r\n BodyCallBack:buffer: %s\r\n", (char*)ptr);size_t tSize = 0;HttpBody* lpWebParam = (HttpBody*)stream;if(lpWebParam->lpBuffer != NULL){if(lpWebParam->u32Offset + size * nmemb > lpWebParam->u32TotalSize){lpWebParam->u8Full = 1;}else{memcpy(lpWebParam->lpBuffer + lpWebParam->u32Offset, ptr, size * nmemb);tSize = size * nmemb;lpWebParam->u32Offset = (U32)tSize + lpWebParam->u32Offset ;}}return size * nmemb;}}

#include "I8H_Http.h"#include <stdlib.h>#ifdef WIN32#include <direct.h>#else#include<unistd.h>#endifusing namespace std;S8 s8KeyPathString[256] = {0};S32 OnHttpReq(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time, U32 u32Type);int main(int argc, char* argv[]){    CURLcode crulCode = CURLE_OK;char *lpKeyPath = NULL;    S8* lpInBuffer = (S8*)"{\"type\":0,\"ch\":1,\"param\":{\"ip\":\"192.168.0.216\",\"username\":\"admin\",\"pwd\":\"\"},\"data\":{}}";S8* lpOutBuffer = NULL;S8 s8Url[256]="www.baidu.com" ;S8 s8Header[4] = {0};S32 s32Result = 0;U32 u32BufferSize = strlen(lpInBuffer) + 1;U32 u32OutSize = 0;#ifdef WIN32lpKeyPath=_getcwd(NULL,0);    strcpy((char*)s8KeyPathString, lpKeyPath);    strcat((char*)s8KeyPathString, "\\self.pem");#else    lpKeyPath = getcwd(NULL,0);    strcpy((char*)s8KeyPathString, lpKeyPath);    strcat((char*)s8KeyPathString, "/self.pem");#endifprintf("%s\r\n", s8KeyPathString);    crulCode = curl_global_init(CURL_GLOBAL_ALL);    s32Result =  OnHttpReq(s8Url, s8Header, s8Header, u32BufferSize, &lpOutBuffer, &u32OutSize, (5 << 16)|1, 0);char c = getchar( );    s32Result =  OnHttpReq((S8*)"http://192.168.0.216:80//goform//frmDevicePara", s8Header, lpInBuffer, u32BufferSize, &lpOutBuffer, &u32OutSize, (5 << 16)|1, 1);curl_global_cleanup();    return 0;}S32 OnHttpReq(S8* lpUrl, S8* lpHeader, S8* lpInBuffer,U32 u32InSize, S8** lpOutBuffer, U32* u32OutSize, U32 u32Time, U32 u32Type){    S32 s32Result = -1;HTTPSDK::CHttpSession* lpHttp = NULL;lpHttp = new HTTPSDK::CHttpSession;if(u32Type == 0)    {        s32Result = lpHttp->OnGetRequest(lpUrl, lpHeader, lpInBuffer, u32InSize, lpOutBuffer, u32OutSize, u32Time);    }    else if(u32Type == 1)    {        s32Result = lpHttp->OnPostRequest(lpUrl, lpHeader, lpInBuffer, u32InSize, lpOutBuffer, u32OutSize, u32Time);    }if (s32Result != I8H_ERROR_CODE_NOERROR){printf("http request error!\r\n");}UTILITY_FREE_POINT(lpHttp);return s32Result;}

github源码: https://github.com/JannyMon/CurlDemo

0 0
原创粉丝点击