【问题标题】:Accessing internal libcurl ptrs访问内部 libcurl ptrs
【发布时间】:2014-05-29 14:34:19
【问题描述】:

我目前正在使用libcurl 检查php 脚本并将其输出写入文件。我想添加错误消息,为此我计划在将数据写入文件之前读取数据,检查 php 的错误消息,如果存在则取消文件写入并返回错误消息.我的代码是:

static size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) 
{ 
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int PhpQuerier::getBlob(string* frameName, string fn)
{
    CURL *curl;
    FILE *fp;
    CURLcode res;
    string query = "http://192.168.1.14/selectBlob.php?tableNameFAIL=frame_info&bColName=frame_data&selectCon=frame_name='";
    query.append(*frameName); query.append("'");        

    const char *url = query.c_str();
    curl = curl_easy_init();

    if (curl) {
        fp = fopen(fn.c_str(),"wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);

        fclose(fp);
    }
    return res;
}

我将FAIL 添加到tableName 以确保我的代码会失败。

我需要做的是访问 write_data 中的void *ptr。如果我添加 printf("%*.*s",size * nmemb, size * nmemb, ptr); 我可以打印该值,但我需要在主函数中访问它,而不仅仅是静态 write_data。

我可以在 getBlob 中访问 ptr 吗?或者做不到这一点,是否可以创建一个可以同时看到静态 write_data 和 getBlob 的全局变量?

提前致谢!

【问题讨论】:

    标签: php c++ static libcurl


    【解决方案1】:

    回调获取所有数据,您可以轻松地将所有数据附加到内存中的单个缓冲区并检查您正在寻找的字符串 - 并继续写入文件。如果那是你真正想要的。

    可以在此处找到显示如何将整个响应接收到内存缓冲区的简单示例:http://curl.haxx.se/libcurl/c/getinmemory.html

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      相关资源
      最近更新 更多