libcurl 库的使用 利用libcurl 发送https请求,接受数据不全有关问题
libcurl 库的使用 利用libcurl 发送https请求,接受数据不全问题
在做一个利用https发送请求和接受返回数据的dll,遇到这样一个问题,头疼1天了,竟然没找到原因,情况大概如下:
当接收数据不是很大时候,可以正常工作,比如2K或者几百字节时候正常,一旦大于4K或者更大时候,返回数据就不全了,代码大致如下:
size_t write_data(void *buffer, size_t size, size_t nmemb, void *stream) {
strcpy(((char*) stream),(char *)buffer);
return nmemb*size;
}
TRY{
/********************************************/
CString tmpResult="";
CURL *curl;
CURLcode res;
char m_Result[BUFSIZE]= "";
memset(m_Result,0,sizeof(m_Result));
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, strHttp);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,&m_Result);
// curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);//调试信息打开
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
strcpy(resulttmp,returnerror);
FILE *fp=fopen(TcFilePath+"\\"+"changpssTmp.xml","w");
fwrite(returnerror,returnerror.GetLength(),1,fp);
fclose(fp);
return resulttmp;
}
curl_easy_cleanup(curl);
}
/****************************************/
Texttmp = m_Result; //接受功则把字符串复制给Texttmp 但此时接受长度不够
strcpy(resulttmp,Texttmp);
FILE *fp=fopen(TcFilePath+"\\"+"changpssTmp.xml","w");
fwrite(Texttmp,Texttmp.GetLength(),1,fp);
fclose(fp);
*/
}
CATCH_ALL(e)
{
strcpy(resulttmp,returnerror);
FILE *fp=fopen(TcFilePath+"\\"+"changpssTmp.xml","w");
fwrite(returnerror,returnerror.GetLength(),1,fp);
fclose(fp);
return resulttmp;
}
END_CATCH_ALL
/***********************应该接受内容***************************************/
<?xml version="1.0" encoding="UTF-8"?><result><point>2400</point><status-code>00</status-code><coupon-list><coupon><coupon-id>03cc98f2bd3643d5a6cc44201a3c382a</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>04b249ab3ed74cdc8a98054c521a1aae</coupon-id><name>98元生日蛋糕卷
</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-
.
.
.
.
.
.
04</end-date></coupon><coupon><coupon-id>fda79c0e3b6c4e7e82a079c66a698beb</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>fde28e58c5934992be86842733d741cc</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon></coupon-list><prepay>0</prepay><need-password>no</need-password><customer-grade>VIP会员</customer-grade><card-num>0010650000000077</card-num></result>
/*******************实际接收内容**************************/
mited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d0d483d614a24cbc80ff206888190915</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d2888a5d99d84e72924d21e4f36ae36c</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d2e396f1e92d484a84d323170d620509</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d50139dbf36e409b9c5ad98ab2fc97fc</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>de496b5bbf0a4874a0bc832d241030d6</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>ded3241227304c02b6c679410a852bc8</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>dfa8c0dadc5e4ad3ad7849b2795ad433</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>e06e58e72eaf48359ab3602793f27641</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>eb5b55f4a6df4e73992f96148eecc216</coupon-id><name>98元生日蛋糕卷
在做一个利用https发送请求和接受返回数据的dll,遇到这样一个问题,头疼1天了,竟然没找到原因,情况大概如下:
当接收数据不是很大时候,可以正常工作,比如2K或者几百字节时候正常,一旦大于4K或者更大时候,返回数据就不全了,代码大致如下:
size_t write_data(void *buffer, size_t size, size_t nmemb, void *stream) {
strcpy(((char*) stream),(char *)buffer);
return nmemb*size;
}
TRY{
/********************************************/
CString tmpResult="";
CURL *curl;
CURLcode res;
char m_Result[BUFSIZE]= "";
memset(m_Result,0,sizeof(m_Result));
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, strHttp);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,&m_Result);
// curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);//调试信息打开
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
strcpy(resulttmp,returnerror);
FILE *fp=fopen(TcFilePath+"\\"+"changpssTmp.xml","w");
fwrite(returnerror,returnerror.GetLength(),1,fp);
fclose(fp);
return resulttmp;
}
curl_easy_cleanup(curl);
}
/****************************************/
Texttmp = m_Result; //接受功则把字符串复制给Texttmp 但此时接受长度不够
strcpy(resulttmp,Texttmp);
FILE *fp=fopen(TcFilePath+"\\"+"changpssTmp.xml","w");
fwrite(Texttmp,Texttmp.GetLength(),1,fp);
fclose(fp);
*/
}
CATCH_ALL(e)
{
strcpy(resulttmp,returnerror);
FILE *fp=fopen(TcFilePath+"\\"+"changpssTmp.xml","w");
fwrite(returnerror,returnerror.GetLength(),1,fp);
fclose(fp);
return resulttmp;
}
END_CATCH_ALL
/***********************应该接受内容***************************************/
<?xml version="1.0" encoding="UTF-8"?><result><point>2400</point><status-code>00</status-code><coupon-list><coupon><coupon-id>03cc98f2bd3643d5a6cc44201a3c382a</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>04b249ab3ed74cdc8a98054c521a1aae</coupon-id><name>98元生日蛋糕卷
</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-
.
.
.
.
.
.
04</end-date></coupon><coupon><coupon-id>fda79c0e3b6c4e7e82a079c66a698beb</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>fde28e58c5934992be86842733d741cc</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon></coupon-list><prepay>0</prepay><need-password>no</need-password><customer-grade>VIP会员</customer-grade><card-num>0010650000000077</card-num></result>
/*******************实际接收内容**************************/
mited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d0d483d614a24cbc80ff206888190915</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d2888a5d99d84e72924d21e4f36ae36c</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d2e396f1e92d484a84d323170d620509</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>d50139dbf36e409b9c5ad98ab2fc97fc</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>de496b5bbf0a4874a0bc832d241030d6</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>ded3241227304c02b6c679410a852bc8</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>dfa8c0dadc5e4ad3ad7849b2795ad433</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>e06e58e72eaf48359ab3602793f27641</coupon-id><name>98元生日蛋糕卷</name><money>9800</money><available>yes</available><limited-money>10000</limited-money><end-date>2010-09-04</end-date></coupon><coupon><coupon-id>eb5b55f4a6df4e73992f96148eecc216</coupon-id><name>98元生日蛋糕卷