curl 7.59中CURLFORM_BUFFER字段对应的MIME API替代方案咨询
curl MIME上传替换CURLFORM_BUFFER的等效API说明
嘿,刚好对curl的MIME API比较熟悉,我来给你梳理下原来的CURLFORM系列字段对应的MIME方法,解决你找等效API的问题:
对应CURLFORM_BUFFER(设置上传文件名):
直接用curl_mime_filename()函数就可以!这个方法专门用来设置MIME部分的文件名(也就是HTTP请求里Content-Disposition头里的filename参数),和你原来用CURLFORM_BUFFER的作用完全一致。对应CURLFORM_BUFFERPTR + CURLFORM_BUFFERLENGTH(上传内存数据):
用curl_mime_data()函数,第一个参数是MIME部分对象,第二个是内存数据的指针,第三个是数据长度。如果你的数据是以null结尾的字符串,可以把长度设为CURL_ZERO_TERMINATED,否则传入实际的字节数就行,完美对应原来的BUFFERPTR和BUFFERLENGTH组合。对应CURLFORM_COPYNAME(设置表单字段名):
用curl_mime_name()函数,传入MIME部分对象和表单字段的名称字符串,这就是原来CURLFORM_COPYNAME的等效方法。
举个新旧代码对比的例子更直观:
旧的表单上传方式(用CURLFORM_*):
struct curl_httppost *formpost = NULL; struct curl_httppost *lastptr = NULL; curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "upload_field", CURLFORM_BUFFER, "my_file.txt", CURLFORM_BUFFERPTR, my_data_buffer, CURLFORM_BUFFERLENGTH, my_data_length, CURLFORM_END); curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
新的MIME上传方式:
// 初始化MIME对象 curl_mime *mime = curl_mime_init(curl); // 添加一个MIME部分 curl_mimepart *part = curl_mime_addpart(mime); // 设置表单字段名(对应CURLFORM_COPYNAME) curl_mime_name(part, "upload_field"); // 设置上传文件名(对应CURLFORM_BUFFER) curl_mime_filename(part, "my_file.txt"); // 设置内存中的上传数据(对应CURLFORM_BUFFERPTR + CURLFORM_BUFFERLENGTH) curl_mime_data(part, my_data_buffer, my_data_length); // 将MIME对象关联到curl句柄 curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime); // 执行请求后记得清理资源 curl_easy_perform(curl); curl_mime_free(mime);
简单来说,curl_mime_filename就是你要找的替代CURLFORM_BUFFER的核心API,配合其他几个MIME方法就能完全替换原来的表单上传逻辑啦。
内容的提问来源于stack exchange,提问作者Swtsvn
相关产品推荐
相关产品推荐

