如何解决尝试使用 libcurl 设置 IBM Watson 的 TTS 服务时出现问题
我正在尝试使用 libcurl 实现 IBM Watson 的 TTS 服务。我正在发送文本“Hello World”,要合成的语音将是“D:\log\Output.aac”
设置 CURLOPT_HTTPHEADER、CURLOPT_POSTFIELDS 和 CURLOPT_FILE 对我来说有点问题,因为我是 libcurl 的新手。如何正确设置这些字段?由于使用了已弃用的旧凭证,IBM Cloud 服务还报告了对我的 Watson 服务进行身份验证时出错。我迷路了,请帮忙。
#include <curl/curl.h>
void Curl_Perform_TTS() {
CURL* curl;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl,CURLOPT_URL,"<url>/v1/synthesize?text=Hello%20world");
curl_easy_setopt(curl,CURLOPT_USERNAME,"Text to Speech-ej"); //not sure,I use service name here
curl_easy_setopt(curl,CURLOPT_PASSWORD,"<API key>");
//curl_easy_setopt(curl,CURLOPT_RETURNTRANSFER,true); //Don't work
curl_easy_setopt(curl,CURLOPT_POST,true);
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,0L);
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,0L);
curl_easy_setopt(curl,CURLOPT_HTTPHEADER,"{\"Content-Type\":\"audio/flac\",\"Transfer-Encoding: chunked\"}");
curl_easy_setopt(curl,CURLOPT_POSTFIELDS,"{\"path\":\"D:\\log\"}");
curl_easy_setopt(curl,CURLOPT_FILE,"{\"Output.mp3\"}");
CURLcode result = curl_easy_perform(curl);
if (result != CURLE_OK)
{
fprintf(stderr,"curl_easy_perform() failed: %s\n",curl_easy_strerror(result));
}
curl_easy_cleanup(curl);
}
}
int main()
{
Curl_Perform_TTS();
return 0;
}
解决方法
我认为,主要问题是您没有正确形成标题。
查看 page_published
signal 您可以注意到添加 HTTP 标头
CURLcode curl_easy_setopt(CURL *handle,CURLOPT_HTTPHEADER,struct curl_slist *headers);
您必须首先创建一个 struct curl_slist
,并将其作为 curl_easy_setopt
的参数传递。例如:
struct curl_slist *headerslist = NULL;
// .....
//and later when you need to add a header,do it in this way
headerlist = curl_slist_append(headerslist,"Content-Type: audio/flac");
//When you are done,clean the memory used by the linked list
//This should be done after performing the request of course
curl_slist_free_all(headerslist);
这可能是您的问题之一,另一个与 CURLOPT_POSTFIELDS
有关。哪个有这个接口来处理:
CURLcode curl_easy_setopt(CURL *handle,CURLOPT_POSTFIELDS,char *postdata);
此文档的文档是 libcurl documentation。一个例子可以像这样简单
curl_easy_setopt(curl,"name=daniel&project=curl");
我认为总的来说,官方文档中的这些示例应该可以帮助您正确地提出请求:
名单还在继续。如果您需要更多示例,可以在 simple post
中阅读所有示例版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。