|
|
@@ -4,7 +4,7 @@
|
|
|
#include <curl/curl.h>
|
|
|
|
|
|
CHttpClient::CHttpClient(void) :
|
|
|
- m_bDebug(false)
|
|
|
+ m_bDebug(false)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
@@ -16,202 +16,254 @@ CHttpClient::~CHttpClient(void)
|
|
|
|
|
|
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;
|
|
|
+ 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);
|
|
|
+ std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
|
|
|
|
|
|
- if(NULL == str || NULL == buffer)
|
|
|
- {
|
|
|
- return -1;
|
|
|
- }
|
|
|
+ if (NULL == str || NULL == buffer)
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
- char* pData = (char*)buffer;
|
|
|
- str->append(pData, size * nmemb);
|
|
|
- return nmemb;
|
|
|
+ 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)
|
|
|
+int CHttpClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse, CZhipuziHttpProxy proxy)
|
|
|
{
|
|
|
- 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, 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, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
- res = curl_easy_perform(curl);
|
|
|
- curl_easy_cleanup(curl);
|
|
|
- return res;
|
|
|
+ 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, 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);
|
|
|
+
|
|
|
+ if (proxy.m_is_proxy)
|
|
|
+ {
|
|
|
+ std::string addr = proxy.ip + ":" + proxy.port;
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXY, addr.c_str());
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
|
|
|
+
|
|
|
+ if (!proxy.username.empty() && !proxy.password.empty())
|
|
|
+ {
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, (proxy.username + ":" + proxy.password).c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
|
|
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
+ res = curl_easy_perform(curl);
|
|
|
+ curl_easy_cleanup(curl);
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
-int CHttpClient::Get(const std::string & strUrl, std::string & strResponse)
|
|
|
+int CHttpClient::Get(const std::string & strUrl, std::string & strResponse, CZhipuziHttpProxy proxy)
|
|
|
{
|
|
|
- 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, 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, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
- res = curl_easy_perform(curl);
|
|
|
- curl_easy_cleanup(curl);
|
|
|
- return res;
|
|
|
+ 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, 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);
|
|
|
+
|
|
|
+ if (proxy.m_is_proxy)
|
|
|
+ {
|
|
|
+ std::string addr = proxy.ip + ":" + proxy.port;
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXY, addr.c_str());
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
|
|
|
+
|
|
|
+ if (!proxy.username.empty() && !proxy.password.empty())
|
|
|
+ {
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, (proxy.username + ":" + proxy.password).c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。
|
|
|
+ * 如果不设置这个选项,libcurl将会发信号打断这个wait从而导致程序退出。
|
|
|
+ */
|
|
|
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
|
|
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
+ res = curl_easy_perform(curl);
|
|
|
+ curl_easy_cleanup(curl);
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
*返回值说明 https://blog.csdn.net/u011857683/article/details/53069268
|
|
|
**/
|
|
|
-int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath)
|
|
|
+int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath, CZhipuziHttpProxy proxy)
|
|
|
{
|
|
|
- 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, 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_COOKIE, "lwm_gray_tag=rc");;
|
|
|
-
|
|
|
- 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, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
- res = curl_easy_perform(curl);
|
|
|
- curl_easy_cleanup(curl);
|
|
|
- return res;
|
|
|
+ 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, 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_COOKIE, "lwm_gray_tag=rc");;
|
|
|
+
|
|
|
+ if (proxy.m_is_proxy)
|
|
|
+ {
|
|
|
+ std::string addr = proxy.ip + ":" + proxy.port;
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXY, addr.c_str());
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
|
|
|
+ curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
|
|
|
+
|
|
|
+ if (!proxy.username.empty() && !proxy.password.empty())
|
|
|
+ {
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, (proxy.username + ":" + proxy.password).c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
+ res = curl_easy_perform(curl);
|
|
|
+ curl_easy_cleanup(curl);
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
-int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath)
|
|
|
+int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath, CZhipuziHttpProxy proxy)
|
|
|
{
|
|
|
- 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, 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, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
- res = curl_easy_perform(curl);
|
|
|
- curl_easy_cleanup(curl);
|
|
|
- return res;
|
|
|
+ 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, 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 (proxy.m_is_proxy)
|
|
|
+ {
|
|
|
+ std::string addr = proxy.ip + ":" + proxy.port;
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXY, addr.c_str());
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
|
|
|
+ curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
|
|
|
+
|
|
|
+ if (!proxy.username.empty() && !proxy.password.empty())
|
|
|
+ {
|
|
|
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, (proxy.username + ":" + proxy.password).c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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, 8);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
|
|
|
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
|
|
|
+ res = curl_easy_perform(curl);
|
|
|
+ curl_easy_cleanup(curl);
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CHttpClient::SetDebug(bool bDebug)
|
|
|
{
|
|
|
- m_bDebug = bDebug;
|
|
|
+ m_bDebug = bDebug;
|
|
|
}
|