【发布时间】:2018-03-03 19:55:00
【问题描述】:
我想在 Delphi 中使用 Indy 的 TIdHTTP 通过 HTTPS 向 Microsoft Speech Recognition API 发送 Post 请求。
在微软的语音识别 API 页面上:Microsoft Speech Recognition API Get started with speech recognition by using the REST API
他们写道,您应该像这样发送 HTTP POST 请求:
POST https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US&format=detailed HTTP/1.1
Accept: application/json;text/xml
Content-Type: audio/wav; codec=audio/pcm; samplerate=16000
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
Host: speech.platform.bing.com
Transfer-Encoding: chunked
Expect: 100-continue
我用 Delphi XE 10 Indy 试试这个。
但我曾经收到错误 400 - 作为答案的错误请求!
我在下面的代码中做错了什么?
procedure TForm1.Button1Click(Sender: TObject);
var
Response, csrf, url: String;
PostStream: TIdMultipartFormDataStream;
HTTPClient: TIdHTTP;
SSL: TIdSSLIOHandlerSocketOpenSSL;
begin
url := 'https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US&format=detailed HTTP/1.1';
HTTPClient := TIdHTTP.Create;
try
HTTPClient.Disconnect;
HTTPClient.AllowCookies := True;
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(HTTPClient);
SSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
HTTPClient.IOHandler := SSL;
HTTPClient.HandleRedirects := true;
HTTPClient.Request.Accept := 'application/json;text/xml';
HTTPClient.Request.Method := 'POST';
HTTPClient.Request.ContentType := 'audio/wav; codec=audio/pcm; samplerate=16000';
//-----------------------------------------------------------------------
PostStream := TIdMultiPartFormDataStream.Create;
try
PostStream.AddFormField('Ocp-Apim-Subscription-Key','YOUR_SUBSCRIPTION_KEY');
PostStream.AddFile('file', 'test.wav');
Response := HTTPClient.Post(url, PostStream);
PostStream.Clear;
finally
PostStream.Free;
end;
finally
HTTPClient.Free;
end;
end;
【问题讨论】:
-
做一些调试。你的代码传递了什么?
-
@David:我在代码中做错了什么?
-
做一些调试。您的发布请求是什么样的。
-
没有。我正在帮助您学习如何调试。检查您实际发布的内容。这是调试的起点。该网站不存在为您完成工作。
-
如果您查看了实际的发布请求,您会发现它与规范不符。这正是雷米告诉你的。当然,他为你做了你的工作,给了你代码,现在你有了工作代码,但你什么也没学到。您仍然不知道如何调试。这意味着下次遇到困难时,您会回到这里要求其他人编写您的代码。如果你学会了调试,你就能解决自己的问题。
标签: delphi ssl https speech indy10