2017-08-02 127 views
0

由於當前項目的限制,我不得不手動編寫C++中的WebSocket協議。我能夠獲得授權密鑰,但是當我嘗試升級下一個套接字連接時,服務器在獲得完整的MIME頭後停頓。然後當我發送任何東西后,我得到一個400錯誤。我沒有從服務器獲得連接已升級到WebSocket的確認。這裏是一個轉儲:升級到Azure(微軟)websocket不確認

========================================================================= 
POST /sts/v1.0/issueToken HTTP/1.1 
Accept: */* 
Connection: Keep-Alive 
Content-Length: 0 
Content-Type: application/x-www-form-urlencoded 
Host: api.cognitive.microsoft.com 
Ocp-Apim-Subscription-Key: 21cedc8aaab847369294240b2122b08d 
Origin: https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fapi.cognitive.microsoft.com&data=04%7C01%7Cv-lufil%40microsoft.com%7C427ffe760b7a4f6ffe6a08d4d8fa0613%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636372015735060988%7CUnknown%7CVW5rbm93bnx7IlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiT3RoZXIifQ%3D%3D%7C-1&sdata=823HpmiJeZ54tzq6CpX86ZS8B0yUiOYSNMXvrmDSunA%3D&reserved=0 
User-Agent: Gideon/0.0.1 

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 495 
Content-Type: application/jwt; charset=us-ascii 
Expires: -1 
Server: Microsoft-IIS/8.5 Microsoft-HTTPAPI/2.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
apim-request-id: 00fe24bc-ba53-4d91-9363-ea7fddfe2a5a 
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload 
x-content-type-options: nosniff 
Access-Control-Allow-Origin: * 
Access-Control-Expose-Headers: Operation-Location 
Date: Tue, 01 Aug 2017 15:21:40 GMT 

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY29wZSI6Imh0dHBzOi8vc3BlZWNoLnBsYXRmb3JtLmJpbmcuY29tIiwic3Vic2NyaXB0aW9uLWlkIjoiZmMwOGVlNGM5ZmNkNGI0MWFmNTZiNzJmZDliZTE4ZWEiLCJwcm9kdWN0LWlkIjoiQmluZy5TcGVlY2guUHJldmlldyIsImNvZ25pdGl2ZS1zZXJ2aWNlcy1lbmRwb2ludCI6Imh0dHBzOi8vYXBpLmNvZ25pdGl2ZS5taWNyb3NvZnQuY29tL2ludGVybmFsL3YxLjAvIiwiYXp1cmUtcmVzb3VyY2UtaWQiOiIiLCJpc3MiOiJ1cm46bXMuY29nbml0aXZlc2VydmljZXMiLCJhdWQiOiJ1cm46bXMuc3BlZWNoIiwiZXhwIjoxNTAxNjAxNDk5fQ.2RQhid_B45fN5M2BmUlodhIe4Xxx71Ws1b03JylERUw 
========================================================================= 
POST /speech/recognition/dictation/cognitiveservices/v1?language=en-US HTTP/1.1 
Accept: */* 
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY29wZSI6Imh0dHBzOi8vc3BlZWNoLnBsYXRmb3JtLmJpbmcuY29tIiwic3Vic2NyaXB0aW9uLWlkIjoiZmMwOGVlNGM5ZmNkNGI0MWFmNTZiNzJmZDliZTE4ZWEiLCJwcm9kdWN0LWlkIjoiQmluZy5TcGVlY2guUHJldmlldyIsImNvZ25pdGl2ZS1zZXJ2aWNlcy1lbmRwb2ludCI6Imh0dHBzOi8vYXBpLmNvZ25pdGl2ZS5taWNyb3NvZnQuY29tL2ludGVybmFsL3YxLjAvIiwiYXp1cmUtcmVzb3VyY2UtaWQiOiIiLCJpc3MiOiJ1cm46bXMuY29nbml0aXZlc2VydmljZXMiLCJhdWQiOiJ1cm46bXMuc3BlZWNoIiwiZXhwIjoxNTAxNjAxNDk5fQ.2RQhid_B45fN5M2BmUlodhIe4Xxx71Ws1b03JylERUw 
Connection: upgrade 
Content-Length: 8002 
Content-Type: audio/wav; codec=audio/pcm; samplerate=16000 
Host: speech.platform.bing.com 
Path: audio 
Sec-WebSocket-Key: Z2lkZW9ucm9ja3MK 
Transfer-Encoding: chunked 
Upgrade: websocket 
User-Agent: Gideon/0.0.1 
X-RequestId: 21cedc8aaab847369294240b2122b08d 
X-Timestamp: 2017-08-01T15:21:40 



HTTP/1.1 400 Bad Request 
Exception: 4xx Client failure 

請注意,服務器不會盡管獲得兩個答覆爲「\ r \ n」表示MIME頭的一端。當我發送任何東西后,我得到一個400錯誤。

回答

0

根據您的轉儲日誌,似乎您想使用Microsoft的語音服務將語音轉換爲文本。

通過使用Microsoft的語音服務,400錯誤意味着您沒有應用所有必需的參數和HTTP標頭,並且這些值是正確的。

我發現您的請求在您的請求中遺漏了X-ConnectionId。

根據這一article

微軟語音服務要求所有的客戶包括一個獨特的ID來識別連接。啓動Web套接字握手時,客戶端必須包含X-ConnectionId標頭。 X-ConnectionId標頭值必須是通用唯一標識符。不包含X-ConnectionId的Web套接字升級請求,沒有指定X-ConnectionId標頭的值或不包含有效通用唯一標識符值的Web套接字升級請求將被具有400錯誤請求響應的服務拒絕。

所以我建議你可以添加識別ID並再次測試。