我正在尝试使用Python语言中的requests包来调用Microsoft Bing语音转录API。当我使用Postman时,我可以让调用工作,但是这需要手动选择要上传的文件(Postman提供了一个图形用户界面来选择文件),但是我不确定这个文件选择如何映射到实际的HTTP请求(以及扩展到Python requests
请求)。Postman可以将其内部查询转换为代码,根据Postman的说法,它发出的http请求是:
POST /recognize?scenarios=smd&appid=[REDACTED]&locale=en-US&device.os=wp7&version=3.0&format=json&form=BCSSTT&instanceid=[REDACTED]&requestid=[REDACTED] HTTP/1.1
Host: speech.platform.bing.com
Authorization: [REDACTED]
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: [REDACTED]
undefined
如果是通过Python requests
库发出的等效请求将是:
import requests
url = "https://speech.platform.bing.com/recognize"
querystring = {"scenarios":"smd","appid":[REDACTED],"locale":"en-US","device.os":"wp7","version":"3.0","format":"json","form":"BCSSTT","instanceid":[REDACTED],"requestid":[REDACTED]}
headers = {
'authorization': [REDACTED],
'content-type': "application/x-www-form-urlencoded",
'cache-control': "no-cache",
'postman-token': [REDACTED]
}
response = requests.request("POST", url, headers=headers, params=querystring)
print(response.text)
但是请注意,在这两种情况下,生成的代码实际上都没有传入要转录的音频文件(显然Postman不知道如何显示原始音频数据),所以我不确定如何将这一关键信息添加到请求中。我假设在HTTP请求代码的情况下,音频流位于显示为“未定义”的位置。在Python request命令中,从读取documentation可以看出,response = requests.request(...)
行应该替换为:
response = requests.request("POST", url, headers=headers, params=querystring, files={'file': open('PATH/TO/AUDIO/FILE', 'rb')})
但是当我运行这个查询时,我得到"Request timed out (> 14000 ms)“。关于如何通过Python成功调用Microsoft Speech API,您有什么想法吗?任何帮助都将不胜感激,谢谢。
发布于 2017-05-10 03:58:20
将这一行作为您的post请求:
r = requests.post(url, headers=headers, params=querystring, data=open('PATH/TO/WAV/FILE', 'rb').read())
这应该能起到作用。
在Microsoft Documentation中,音频文件二进制数据是POST请求的主体,必须使用请求库的data
参数发送。
https://stackoverflow.com/questions/43724218
复制相似问题