curl\u easy\u perform在一个点后返回部分结果

curl\u easy\u perform在一个点后返回部分结果,curl,libcurl,Curl,Libcurl,我在代码中使用libcurl,curl\u easy\u perform()的前几次尝试返回正确的值,但之后我看到前800个左右的字节被删除。传递指针write_data函数时,函数开始指向前800字节左右之后的流 以下是我使用的代码片段- ctx = curl_easy_init(); curl_easy_setopt(ctx, CURLOPT_POSTFIELDS, bodyData); curl_easy_setopt(ctx, CURLOPT_URL, serverUrl); curl_

我在代码中使用libcurl,curl\u easy\u perform()的前几次尝试返回正确的值,但之后我看到前800个左右的字节被删除。传递指针write_data函数时,函数开始指向前800字节左右之后的流

以下是我使用的代码片段-

ctx = curl_easy_init();
curl_easy_setopt(ctx, CURLOPT_POSTFIELDS, bodyData);
curl_easy_setopt(ctx, CURLOPT_URL, serverUrl);
curl_easy_setopt(ctx, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(ctx, CURLOPT_WRITEDATA, response);
res = curl_easy_perform(ctx);
curl_easy_cleanup(ctx);
编辑:好的,我看到对于一些请求,write_数据被调用两次,用于一个curl_easy_perform()。因此,write_data获取第一个x字节,然后在下一次读取剩余的x字节。但是我的write_data函数每次都重写响应指针。如何知道是否需要memcpy或连接到响应指针?我希望我能恰当地描述情况

谢谢


p

对于单个请求,CURLOPT_WRITEFUNCTION回调将被调用一次或多次。您的函数需要正确处理该问题。

对于单个请求,CURLOPT_WRITEFUNCTION回调将被调用一次或多次。您的函数需要正确处理该问题。

您需要提供一个大的缓冲区(“响应”指针),并且每次调用write_data函数时,都会向缓冲区追加更多数据。您的响应指针可能应该指向struct,如下所示:

struct myStruct{
    char *buffer; /* remember to malloc this! */
    int size; /* 100000 */
    int used; /* initially 0 */
};
typedef struct myStruct myStruct;
然后,在write_data函数的每个条目上,您希望在最后一个写入位置之后将提供的数据memcpy到缓冲区中(请记住,提供的用于写入_数据的缓冲区不一定以null结尾),例如:


像那样的东西应该可以。(免责声明:我没有费心去编译它,但它应该可以工作)

您需要提供一个大的缓冲区(“响应”指针),每次调用write_data函数时,您都会向缓冲区添加更多数据。您的响应指针可能应该指向struct,如下所示:

struct myStruct{
    char *buffer; /* remember to malloc this! */
    int size; /* 100000 */
    int used; /* initially 0 */
};
typedef struct myStruct myStruct;
然后,在write_data函数的每个条目上,您希望在最后一个写入位置之后将提供的数据memcpy到缓冲区中(请记住,提供的用于写入_数据的缓冲区不一定以null结尾),例如:


像那样的东西应该可以。(免责声明:我没有费心去编译它,但它应该可以工作)

这也正是我发现的。谢谢你的回复这也是我发现的。谢谢你的回复。这也是我意识到的。是的。这也是我意识到的,里面有一个工作代码,里面有一个工作代码