gpt4 book ai didi

c++ - 如何使用 curl c++ 源发布 wav 文件数据,如何使用 --data-binary 和 c++?

转载 作者:行者123 更新时间:2023-11-28 04:09:18 24 4
gpt4 key购买 nike

我想用 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: %s\n",
curl_easy_strerror(res));


curl_easy_cleanup(curl);

curl_formfree(formpost);

curl_slist_free_all(headerlist);
}
return 0;
}

最佳答案

--data-binaryCURLOPT_POSTFIELDS,但您在这里犯了几个错误:

  • 您的代码试图将“multipart/form-data”POST 请求和普通 POST 请求混合在一起,结果很可能是服务器无法解析的乱码。下定决心,使用普通的 POST 请求,使用 multipart/form-data 请求,但不要在同一个请求中混合这两个请求(这就是您的代码所做的),以修复它只需删除所有 formpost 代码,您不需要此处的多部分请求。

  • 您正在尝试发送一个二进制文件,该文件可能(而且几乎肯定会)包含 NULL 字节,默认情况下,curl 将使用 strlen() 来检查要发送的数据的大小,它会在第一个位置停止空字节,因此您的传输将不完整。使用 CURLOPT_POSTFIELDSIZE_LARGE 告诉 curl 你的二进制文件有多少字节。

  • 即使无法创建 curl 句柄,您也会返回成功代码。 (一开始我以为我看到了 3 个问题,但现在我只看到了 2 个,嗯)

关于c++ - 如何使用 curl c++ 源发布 wav 文件数据,如何使用 --data-binary 和 c++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58153771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com