You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GuzzleHttp传递版本参数失败,请求返回400错误求助

解决Guzzle调用Watson Tone Analyzer时的版本参数缺失问题

嘿,我来帮你搞定这个问题!从错误信息来看,核心问题很明确:Watson Tone Analyzer的v3 API强制要求URL中必须包含version参数,而且你的请求实际被识别成了GET(说不定是代码里的请求方法写错了?)。

先看错误提示的关键内容:

Missing a minor version parameter in the URL. To use the latest version, add th (truncated...)

Watson的v3 API要求必须在URL里指定具体的版本号,比如version=2017-09-21(这是官方推荐的稳定版本,你也可以去查最新的版本号)。

修正后的完整代码示例

给你写一个正确的POST请求示例,包含必要的版本参数、认证信息和请求体:

// 初始化Guzzle客户端,配置基础地址和认证信息
$client = new \GuzzleHttp\Client([
    'base_uri' => 'https://gateway.watsonplatform.net/tone-analyzer/api/',
    // 用API key认证的写法,替换成你的实际key
    'auth' => ['apikey', '你的API_KEY_HERE']
    // 如果是用户名密码认证,改成 ['你的用户名', '你的密码']
]);

try {
    $toneAnalyserResponse = $client->post('v3/tone', [
        // 把version作为查询参数传递,也可以直接拼在URL里:'v3/tone?version=2017-09-21'
        'query' => [
            'version' => '2017-09-21' // 这是必须的版本参数,不能少
        ],
        // POST请求的核心内容:要分析的文本
        'json' => [
            'text' => '今天的天气真好,整个人都充满活力!'
        ]
    ]);

    // 解析并打印响应结果
    $responseData = json_decode($toneAnalyserResponse->getBody(), true);
    print_r($responseData);
} catch (\GuzzleHttp\Exception\ClientException $e) {
    // 捕获错误并打印详细信息,方便调试
    echo $e->getResponse()->getBody()->getContents();
}

关键修正点说明

  • 版本参数必须存在:要么通过query数组传递,要么直接拼在请求路径里,两种方式都可行,但必须要有。
  • 确保用POST请求:调用$client->post()而不是get(),Watson的tone接口支持POST(更适合传递长文本内容)。
  • 认证信息不能漏:Watson API需要身份验证,不管是API key还是用户名密码,都得在客户端初始化或者请求参数里配置好。

如果之前你不小心用了get()方法,同样会触发这个错误(因为GET请求也要求带version参数),所以一定要确认请求方法和参数都配置正确。

内容的提问来源于stack exchange,提问作者OlivierS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:30:59