我目前正在使用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);
我可以打印该值,但我需要在main函数中访问它,而不仅仅是静态write_data。
我可以在getBlob中访问ptr吗?或者失败了,是否可以创建一个可以看到静态write_data和getBlob的全局变量?
提前致谢!
答案 0 :(得分:0)
回调获取所有数据,您可以轻松地将所有数据附加到内存中的单个缓冲区,并检查您正在寻找的字符串 - 并继续写入文件。如果这真的是你想要的那样。
可以在此处找到一个简单的示例,说明如何将整个响应接收到内存缓冲区中:http://curl.haxx.se/libcurl/c/getinmemory.html