我正在尝试使用自定义流(多个二进制文件)发送多部分 MIME 消息。为此,我无法让我的CURLOPT_READFUNCTION
回调使用由CURLFORM_STREAM
.
据我所知,文档CURLFORM_STREAM
在CURLOPT_READFUNCTION
开始流式传输数据时会自动调用指针。这不会发生在我身上。
这是我当前的代码示例(我一直在尝试不同的配置但没有成功)。CURLCODECHECK
并且CURLFORMCHECK
是在错误时引发异常的宏。streams
是我自己的StreamData
结构的向量。
CURLCODECHECK(curl_easy_setopt(m_Curl, CURLOPT_HTTPPOST, 1L));
CURLCODECHECK(curl_easy_setopt(m_Curl, CURLOPT_READFUNCTION, ::StreamReadFunction));
for (auto iter = streams.begin(); iter != streams.end(); ++iter)
{
std::string const & name = iter->first;
auto streamData = iter->second;
CURLFORMCHECK(curl_formadd(&m_Post, &last,
CURLFORM_COPYNAME, name.c_str(),
CURLFORM_FILENAME, streamData->fileName.c_str(),
CURLFORM_CONTENTTYPE, streamData->mimeType.c_str(),
CURLFORM_STREAM, (void *) streamData.get(),
CURLFORM_CONTENTSLENGTH, streamData->size,
CURLFORM_END));
}
My::StreamReadFunction
确实被调用,但除非我curl_easy_setopt()
使用CURLOPT_READDATA
set 调用,否则它会为第四个 (void * userdata) 参数传递一个空指针。