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

时间:2010-11-18 12:39:21

标签: c++ curl vector libcurl

正如我的标题所说,我想将卷曲执行的输出保存到矢量.. 可以任意1请给我一个示例代码? 我能够将它保存到c中的结构中。但是我想将它保存到c ++中的矢量中,而且我对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;
}

3 个答案:

答案 0 :(得分:1)

试试cURLpp。这里的an example可能很有用。

答案 1 :(得分:1)

我不知道卷曲,所以我假设设置代码是正确的。所以你想要的是回调函数,为接收到的字符串向量的每个数据块添加一个字符串。这也假设返回的数据是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()的“调用”实际构造了一个用指针和数据长度初始化的字符串对象。

答案 2 :(得分:0)

以下是您可能正在寻找的内容:

size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream)
 {
     size_t numbytes = size*nmemb;

     string temp(static_cast<char*>(ptr), nmemb);

     contents.push_back(temp);

     return numbytes;
 }

我很确定你不想写入CURL库传递的void *ptr。而且看起来你用'\0'覆盖了内存地址的最后一个字符,然后在推送到向量后将原始值重新放回到那里。我不确定这会按预期工作。