c++ - 将curl执行的输出保存到c++中的 vector <string>

标签 c++ curl vector libcurl

正如我的标题所说,我想将 curl 执行的输出保存到 vector 中。 能给我一个示例代码吗? 我能够将它保存到c中的结构中。但我想将它保存到 C++ 中的 vector 中,而且我对 C++ 有点不舒服。

    vector<string> contents;

size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
int numbytes = size*nmemb;
char lastchar = *((char *) ptr + numbytes - 1);
*((char *) ptr + numbytes - 1) = '\0';
contents.push_back((char *)ptr);
*((char *) ptr + numbytes - 1) = lastchar;  // Might not be necessary.
return size*nmemb;
}



int main(int argc, char *argv[])
{

vector<string>::iterator i;

CURL* curl = curl_easy_init();
if(curl)
    {
    curl_easy_setopt(curl,CURLOPT_URL, argv[1]);
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle_data);
    CURLcode res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    if (res == 0){
        for(i=contents.begin();i!=contents.end();i++)
            cout << *i << endl;
    }else
        cerr << "Error: " << res << endl;
    }
return 0;
}

最佳答案

我不知道curl,所以我假设设置代码是正确的。因此,您想要的是回调函数,将接收到的每个数据 block 的字符串添加到字符串 vector 中。这还假设返回的数据是 8 位字符。

vector<string> contents;

size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
    contents.push_back(string(static_cast<const char*>(ptr), size * nmemb));
    return size * nmemb;
}

对 string() 的“调用”实际上构造了一个用指针和数据长度初始化的字符串对象。

关于c++ - 将curl执行的输出保存到c++中的 vector <string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214814/

相关文章:

c++ - 在同一行上使用 malloc 创建两个数组

C++ 变量声明

php - 来自 while 循环的带有 cURL 的 json 发布

php - Twilio cURL 打电话

c++ - 使用智能指针制作哈希表?

c++ - 在 vector.push_back() 导致重新分配后如何让 vector 迭代器指向 vector ?

c++ - 调整 vector 大小后,为什么我不能增加 vector

c++ - Armadillo 不执行交换优化

c++ - 参数未知数据类型的可变参数函数

c++ - 在 C++ 中使用 libCurl API 验证 SAIO(swift 多合一)