如何使用curl c ++源代码发布wav文件数据,如何使用c ++使用--data-binary?
How do i post wav file data with curl c++ source , how do i use --data-binary with c++?
>我想发送带有curl的wav文件。 我可以使用带有终端命令的--data-binary
发送WAV文件。 但是我无法发送带有c++ source
的wav文件。
我用的是Linux,ubuntu 18.04
--data-binary
curl_easy_setopt是什么?
我的代码在这里下面。
我想发送带有 curl 的 wav 文件。 我可以使用带有终端命令的--data-binary
发送 wav 文件。 但是我无法发送带有c++ source
的wav文件。
我用的是Linux,ubuntu 18.04
--data-binary
curl_easy_setopt是什么?
我的代码在这里下面。
#include <iostream>
#include <string>
#include <curl/curl.h>
#include <fstream>
int main(void)
{
std::string contents;
std::ifstream in("test2.wav", std::ios::in | std::ios::binary);
if (in)
{
in.seekg(0, std::ios::end);
contents.resize(in.tellg());
in.seekg(0, std::ios::beg);
in.read(&contents[0], contents.size());
in.close();
}
CURL *curl;
CURLcode res;
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:";
curl_global_init(CURL_GLOBAL_ALL);
// set up the header
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "cache-control:",
CURLFORM_COPYCONTENTS, "no-cache",
CURLFORM_END);
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "content-type:",
CURLFORM_COPYCONTENTS, "audio/wav",
CURLFORM_END);
curl = curl_easy_init();
headerlist = curl_slist_append(headerlist, buf);
if (curl) {
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: audio/wav");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, contents.data());
curl_easy_setopt(curl, CURLOPT_POST,1);
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:9080");
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %sn",
curl_easy_strerror(res));
curl_easy_cleanup(curl);
curl_formfree(formpost);
curl_slist_free_all(headerlist);
}
return 0;
}
--data-binary
CURLOPT_POSTFIELDS
,但你在这里犯了几个错误:
-
您的代码试图将"多部分/表单数据"POST 请求和普通 POST 请求混合在一起,结果可能是服务器无法解析的一些乱码。 下定决心,使用普通的 POST 请求,或使用多部分/表单数据请求,但不要将 2 混合在同一请求中(这就是您的代码正在做的事情(, 要修复它,只需删除所有
formpost
代码,您不希望在此处进行多部分请求。 -
您正在尝试发送一个二进制文件,该文件可能(并且几乎肯定确实(包含 NULL-bytes,默认情况下 curl 将使用 strlen(( 来检查要发送的数据的大小,该大小在第一个空字节处停止,因此您的传输将不完整。 使用
CURLOPT_POSTFIELDSIZE_LARGE
告诉 curl 二进制文件有多少字节。 -
即使无法创建卷曲句柄,也会返回成功代码。(我以为一开始通读时看到了 3 个问题,但现在我只看到了 2 个问题,嗯(
- 如何拆分文件中.txt字母并使用c ++使用数组进行扑克?
- 无法使用 g++ 使用C++代码编译 C 库
- G++ 在尝试使用 G++ 使用 openCV 进行编译后返回错误
- 不能使用使用 lib*.a 的 CDT ---对符号 .. 的重新定位R_X86_64_32S
- 如何使用curl c ++源代码发布wav文件数据,如何使用c ++使用--data-binary?
- 共享库中使用"使用命名空间"定义的符号错误
- 使用使用运算符<<并打印错误值 c++ 的类进行编程
- 使用使用使用模板模板参数的类型
- 如何使用使用代替定义或其他C++功能
- 使用使用声明引入的折叠表达式中的操作员合法
- 为什么使用"使用指令"时 ADL 不起作用?
- 删除类复制构造函数时,不能使用使用等号表示法的类构造函数
- 构建并使用使用另一个共享库的源文件中的共享库.(Rinside)
- 使用使用成员类型别名的构造函数来推论类模板参数
- C++14/17 项目可以使用使用 C++11 标准编译的二进制库还是需要重新编译源代码
- 虽然已正确生成LibConfig.cmake,但无法使用使用cmake生成的库
- 不能在QtCreator中使用使用g++ 7.2的c ++ 17功能
- 使用使用"extern "C""的 C 库与使用本机C++库有什么缺点?
- 如何使用 g++6 使用 std::reduce 和 #include 编译代码<execution_policy>?
- 基例如何影响使用递归函数的哪些行