libcurl 允许您为每个文件传输创建一个“句柄”。它允许您指定文件的 URL 和一个回调函数,该回调函数将接收从 URL 检索到的文件的点点滴滴。如果你想为每个句柄设置不同的回调怎么办?你会怎么做呢?请记住,回调必须是非成员函数(或静态成员函数)。
一种方法是为每个句柄手动输入不同的回调,例如:
size_t callback1(void* buffer, size_t size, size_t nmem, void* userp);
size_t callback2(void* buffer, size_t size, size_t nmem, void* userp);
size_t callback3(void* buffer, size_t size, size_t nmem, void* userp);
// ...etc
这有效,除非您动态地 创建句柄。考虑这样一个函数:
void f(){
CURLHandle handle = curl_easy_init();
// set the url to some random url
// set a *unique* call back for this handle
}
你会怎么做?如果您可以使用成员函数作为回调,解决方案会很简单,但您不能。
最佳答案
因为 curl 是 C 语言,所以你必须以 C 语言的方式来做这件事。回调需要是静态的。要访问您的类变量,您应该将参数传递给回调(参见 CURLOPT_WRITEDATA )。这也可以是一个“this”对象或一个指向 std::string 的指针,我想......参见 getinmemory.c示例。
关于c++ - libcurl,如何为每个句柄附加不同的回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36924031/