如何解决Invoke-WebRequest的Headers参数绑定类型转换错误?
解决PowerShell中调用OpenAI API的参数绑定错误
错误原因
PowerShell里的curl是Invoke-WebRequest的内置别名,并非真正的curl工具。Invoke-WebRequest的-Headers参数要求传入字典类型(System.Collections.IDictionary),而你用了真正curl的字符串格式传递头部信息,导致类型转换失败。
解决方案
方法1:调用真正的curl工具
直接指定curl.exe(Windows 10及以上系统默认自带,若没有可通过Windows功能或包管理器安装),保留原命令格式:
curl.exe ${OPENAI_API_BASE%/}/openai/deployments/try-davinci/completions?api-version=2022-06-01-preview -H "Content-Type: application/json" -H "Authorization: Bearer $accessToken" -d '{ "prompt": "Tell me a funny story." }'
方法2:改用PowerShell原生命令(推荐)
使用Invoke-RestMethod或Invoke-WebRequest,按照PowerShell的语法要求构造头部和请求体:
# 构造请求头部字典 $headers = @{ "Content-Type" = "application/json" "Authorization" = "Bearer $accessToken" } # 构造请求体并转为JSON格式 $body = @{ prompt = "Tell me a funny story." } | ConvertTo-Json # 发送请求(Invoke-RestMethod会直接返回解析后的JSON结果) Invoke-RestMethod -Uri "${OPENAI_API_BASE%/}/openai/deployments/try-davinci/completions?api-version=2022-06-01-preview" -Headers $headers -Method Post -Body $body
如果需要获取原始响应(如状态码、响应头),可以用Invoke-WebRequest替代Invoke-RestMethod,用法基本一致。
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

