update
This commit is contained in:
parent
d0bc2ebfa4
commit
407dfa83d8
|
@ -1,223 +1,260 @@
|
|||
#include "client.h"
|
||||
#include <curl/curl.h>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
CHttpClient::CHttpClient(void) :
|
||||
m_bDebug(false)
|
||||
{
|
||||
}
|
||||
CHttpClient::~CHttpClient(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static const std::string UrlEncode(const std::string& s)
|
||||
{
|
||||
std::string ret;
|
||||
unsigned char *ptr = (unsigned char *)s.c_str();
|
||||
ret.reserve(s.length());
|
||||
|
||||
for(int i=0;i<s.length();++i)
|
||||
{
|
||||
if((int(ptr[i])==42) || (int(ptr[i])==45) || (int(ptr[i])==46) || (int(ptr[i])==47) || (int(ptr[i])==58) ||(int(ptr[i])==95))
|
||||
ret += ptr[i];
|
||||
else if((int(ptr[i])>=48) && (int(ptr[i])<=57))
|
||||
ret += ptr[i];
|
||||
else if((int(ptr[i])>=65) && (int(ptr[i])<=90))
|
||||
ret += ptr[i];
|
||||
else if((int(ptr[i])>=97) && (int(ptr[i])<=122))
|
||||
ret += ptr[i];
|
||||
else if(int(ptr[i])==32)
|
||||
ret += '+';
|
||||
else
|
||||
{
|
||||
char buf[5];
|
||||
memset(buf,0,5);
|
||||
snprintf(buf,5,"%%%X",ptr[i]);
|
||||
ret.append(buf);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int OnDebug(CURL *, curl_infotype itype, char * pData, size_t size, void *)
|
||||
{
|
||||
if(itype == CURLINFO_TEXT)
|
||||
{
|
||||
//printf("[TEXT]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_HEADER_IN)
|
||||
{
|
||||
printf("[HEADER_IN]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_HEADER_OUT)
|
||||
{
|
||||
printf("[HEADER_OUT]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_DATA_IN)
|
||||
{
|
||||
printf("[DATA_IN]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_DATA_OUT)
|
||||
{
|
||||
printf("[DATA_OUT]%s\n", pData);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
|
||||
{
|
||||
std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
|
||||
if( NULL == str || NULL == buffer )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
char* pData = (char*)buffer;
|
||||
str->append(pData, size * nmemb);
|
||||
return nmemb;
|
||||
}
|
||||
|
||||
int CHttpClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
int CHttpClient::Get(const std::string & strUrl, std::string & strResponse)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
/**
|
||||
* 当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。
|
||||
* 如果不设置这个选项,libcurl将会发信号打断这个wait从而导致程序退出。
|
||||
*/
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
//curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
//curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
if(NULL == pCaPath)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
//缺省情况就是PEM,所以无需设置,另外支持DER
|
||||
//curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
|
||||
curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
if(NULL == pCaPath)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
|
||||
curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void CHttpClient::SetDebug(bool bDebug)
|
||||
{
|
||||
m_bDebug = bDebug;
|
||||
}
|
||||
|
||||
#include "client.h"
|
||||
#include <curl/curl.h>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
CHttpClient::CHttpClient(void) :
|
||||
m_bDebug(false)
|
||||
{
|
||||
}
|
||||
CHttpClient::~CHttpClient(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static const std::string UrlEncode(const std::string& s)
|
||||
{
|
||||
std::string ret;
|
||||
unsigned char *ptr = (unsigned char *)s.c_str();
|
||||
ret.reserve(s.length());
|
||||
|
||||
for(int i=0;i<s.length();++i)
|
||||
{
|
||||
if((int(ptr[i])==42) || (int(ptr[i])==45) || (int(ptr[i])==46) || (int(ptr[i])==47) || (int(ptr[i])==58) ||(int(ptr[i])==95))
|
||||
ret += ptr[i];
|
||||
else if((int(ptr[i])>=48) && (int(ptr[i])<=57))
|
||||
ret += ptr[i];
|
||||
else if((int(ptr[i])>=65) && (int(ptr[i])<=90))
|
||||
ret += ptr[i];
|
||||
else if((int(ptr[i])>=97) && (int(ptr[i])<=122))
|
||||
ret += ptr[i];
|
||||
else if(int(ptr[i])==32)
|
||||
ret += '+';
|
||||
else
|
||||
{
|
||||
char buf[5];
|
||||
memset(buf,0,5);
|
||||
snprintf(buf,5,"%%%X",ptr[i]);
|
||||
ret.append(buf);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int OnDebug(CURL *, curl_infotype itype, char * pData, size_t size, void *)
|
||||
{
|
||||
if(itype == CURLINFO_TEXT)
|
||||
{
|
||||
//printf("[TEXT]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_HEADER_IN)
|
||||
{
|
||||
printf("[HEADER_IN]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_HEADER_OUT)
|
||||
{
|
||||
printf("[HEADER_OUT]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_DATA_IN)
|
||||
{
|
||||
printf("[DATA_IN]%s\n", pData);
|
||||
}
|
||||
else if(itype == CURLINFO_DATA_OUT)
|
||||
{
|
||||
printf("[DATA_OUT]%s\n", pData);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
|
||||
{
|
||||
std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
|
||||
if( NULL == str || NULL == buffer )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
char* pData = (char*)buffer;
|
||||
str->append(pData, size * nmemb);
|
||||
return nmemb;
|
||||
}
|
||||
|
||||
int CHttpClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
int CHttpClient::Get(const std::string &strUrl, const std::string &filename, bool SavedOnFile) {
|
||||
if (!SavedOnFile)
|
||||
return -1;
|
||||
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if (NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if (m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
|
||||
|
||||
FILE* fw = fopen(filename.c_str(), "wb");
|
||||
if (!fw)
|
||||
{
|
||||
cout << "open file failed" << endl;
|
||||
return -1;
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fw);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
curl_easy_cleanup(curl);
|
||||
fclose(fw);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
int CHttpClient::Get(const std::string & strUrl, std::string & strResponse)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
/**
|
||||
* 当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。
|
||||
* 如果不设置这个选项,libcurl将会发信号打断这个wait从而导致程序退出。
|
||||
*/
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
//curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
//curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
if(NULL == pCaPath)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
//缺省情况就是PEM,所以无需设置,另外支持DER
|
||||
//curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
|
||||
curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath)
|
||||
{
|
||||
strResponse.clear();
|
||||
CURLcode res;
|
||||
CURL* curl = curl_easy_init();
|
||||
if(NULL == curl)
|
||||
{
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
if(m_bDebug)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, UrlEncode(strUrl).c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
if(NULL == pCaPath)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
|
||||
curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
return res;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void CHttpClient::SetDebug(bool bDebug)
|
||||
{
|
||||
m_bDebug = bDebug;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,63 +1,67 @@
|
|||
#ifndef __HTTP_CURL_H__
|
||||
#define __HTTP_CURL_H__
|
||||
|
||||
//REFERENCE: https://curl.haxx.se/
|
||||
//libcurl is useful for developing http client, but not for server
|
||||
//
|
||||
//TODO: deal with cookie
|
||||
//URL encode: http://www.ruanyifeng.com/blog/2010/02/url_encoding.html
|
||||
|
||||
#include <string>
|
||||
|
||||
class CHttpClient
|
||||
{
|
||||
public:
|
||||
CHttpClient(void);
|
||||
~CHttpClient(void);
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief HTTP POST请求
|
||||
* @param strUrl 输入参数,请求的Url地址,如:http://www.baidu.com
|
||||
* @param strPost 输入参数,使用如下格式para1=val1¶2=val2&…
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
int Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse);
|
||||
|
||||
/**
|
||||
* @brief HTTP GET请求
|
||||
* @param strUrl 输入参数,请求的Url地址,如:http://www.baidu.com
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
int Get(const std::string & strUrl, std::string & strResponse);
|
||||
|
||||
/**
|
||||
* @brief HTTPS POST请求,无证书版本
|
||||
* @param strUrl 输入参数,请求的Url地址,如:https://www.alipay.com
|
||||
* @param strPost 输入参数,使用如下格式para1=val1¶2=val2&…
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @param pCaPath 输入参数,为CA证书的路径.如果输入为NULL,则不验证服务器端证书的有效性.
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
int Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath = NULL);
|
||||
|
||||
/**
|
||||
* @brief HTTPS GET请求,无证书版本
|
||||
* @param strUrl 输入参数,请求的Url地址,如:https://www.alipay.com
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @param pCaPath 输入参数,为CA证书的路径.如果输入为NULL,则不验证服务器端证书的有效性.
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
int Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath = NULL);
|
||||
|
||||
public:
|
||||
void SetDebug(bool bDebug);
|
||||
|
||||
private:
|
||||
bool m_bDebug;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __HTTP_CURL_H__
|
||||
#define __HTTP_CURL_H__
|
||||
|
||||
//REFERENCE: https://curl.haxx.se/
|
||||
//libcurl is useful for developing http client, but not for server
|
||||
//
|
||||
//TODO: deal with cookie
|
||||
//URL encode: http://www.ruanyifeng.com/blog/2010/02/url_encoding.html
|
||||
|
||||
#include <string>
|
||||
|
||||
class CHttpClient
|
||||
{
|
||||
public:
|
||||
CHttpClient(void);
|
||||
~CHttpClient(void);
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief HTTP POST请求
|
||||
* @param strUrl 输入参数,请求的Url地址,如:http://www.baidu.com
|
||||
* @param strPost 输入参数,使用如下格式para1=val1?2=val2&…
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
int Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse);
|
||||
|
||||
/**
|
||||
* @brief HTTP GET请求
|
||||
* @param strUrl 输入参数,请求的Url地址,如:http://www.baidu.com
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
|
||||
int Get(const std::string & strUrl, const std::string & filename, bool SavedOnFile);
|
||||
|
||||
int Get(const std::string & strUrl, std::string & strResponse);
|
||||
|
||||
/**
|
||||
* @brief HTTPS POST请求,无证书版本
|
||||
* @param strUrl 输入参数,请求的Url地址,如:https://www.alipay.com
|
||||
* @param strPost 输入参数,使用如下格式para1=val1?2=val2&…
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @param pCaPath 输入参数,为CA证书的路径.如果输入为NULL,则不验证服务器端证书的有效性.
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
int Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath = NULL);
|
||||
|
||||
/**
|
||||
* @brief HTTPS GET请求,无证书版本
|
||||
* @param strUrl 输入参数,请求的Url地址,如:https://www.alipay.com
|
||||
* @param strResponse 输出参数,返回的内容
|
||||
* @param pCaPath 输入参数,为CA证书的路径.如果输入为NULL,则不验证服务器端证书的有效性.
|
||||
* @return 返回是否Post成功
|
||||
*/
|
||||
int Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath = NULL);
|
||||
|
||||
public:
|
||||
void SetDebug(bool bDebug);
|
||||
|
||||
private:
|
||||
bool m_bDebug;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue