使用AzureCognitive R包调用翻译服务返回HTTP 400错误如何解决
问题原因排查
这属于操作参数配置错误,不是R包bug,两处调用分别存在以下问题:
- 第一处调用的问题:
你直接传入了手动拼接的JSON字符串,首先JSON规范要求字符串必须用双引号包裹,你用的单引号本身就不符合JSON格式;其次call_cognitive_endpoint默认会自动将传入的body参数序列化为JSON,你直接传字符串的话,包会把整个字符串作为JSON值处理,最终发出的请求体结构完全不符合接口要求。 - 第二处调用的问题:
Azure 翻译服务 v3 版本的请求体要求是对象数组格式,每个数组元素是包含Text字段(注意首字母必须大写)的对象,你传的单层列表list(text = "Hello, what is your name")既没有套数组结构,字段名也用了小写,不符合接口规范。
正确调用示例
call_cognitive_endpoint(endpoint = endp, operation = "translate", options = list('api-version' = "3.0", 'from' = 'en', 'to' = 'dk'), # 注意外层多套一层list对应数组,字段名Text首字母大写 body = list(list(Text = "Hello, what is your name?")), http_verb = "POST")
如果确实需要手动传入已经拼接好的JSON字符串,需要额外加encode = "raw"参数,同时要保证JSON本身格式合法(所有引号用双引号):
call_cognitive_endpoint(endpoint = endp, operation = "translate", options = list('api-version' = "3.0", 'from' = 'en', 'to' = 'dk'), body = '[{"Text":"Hello, what is your name?"}]', encode = "raw", http_verb = "POST")
内容的提问来源于stack exchange,提问作者KERO
相关产品推荐
相关产品推荐

