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

使用PHP CURL调用IBM Tone Analyzer报401授权错误如何解决

代码问题修复说明

你代码中存在4处导致401报错以及请求失败的问题:

  • Basic认证格式错误:IBM Watson的Basic认证要求将apikey:你的实际API密钥整个字符串进行Base64编码,再拼接到Authorization: Basic 之后,直接拼接明文不符合认证规范。
  • 请求头设置参数错误:CURLOPT_HEADER是布尔值参数,用于控制是否将响应头包含在返回结果中,设置自定义请求头需要使用CURLOPT_HTTPHEADER参数。
  • 接口URL不完整:Tone Analyzer v3版本接口必须传递version参数,你当前的URL结尾缺省了该参数,常用有效值为version=2017-09-21。
  • CURLOPT_INFILE参数格式错误:该参数需要传入fopen打开的文件资源句柄,不能直接传入文件路径字符串。

修正后完整代码

<?php
$ch = curl_init();

$file_path = "tone.json";
// 替换为你自己的实例ID和API密钥
$instance_id = '你涂黑的实例ID';
$api_key = '你涂黑的API密钥';
// 补充必填的version参数
$url = "https://api.eu-gb.tone-analyzer.watson.cloud.ibm.com/instances/{$instance_id}/v3/tone?version=2017-09-21";

// 生成符合规范的Basic认证字符串
$auth_str = base64_encode("apikey:{$api_key}");
$header_args = array(
   'Accept: application/json',
   'Content-Type: application/json',
   "Authorization: Basic {$auth_str}"
);

// 打开文件获取资源句柄
$file_handle = fopen($file_path, 'r');

curl_setopt_array($ch, array(
    CURLOPT_URL => $url,
    CURLOPT_HTTPHEADER => $header_args,
    CURLOPT_POST => true,
    CURLOPT_INFILE => $file_handle,
    CURLOPT_INFILESIZE => filesize($file_path),
    CURLOPT_RETURNTRANSFER => true,
    // 本地调试如果有SSL证书报错可开启下一行,生产环境建议删除
    // CURLOPT_SSL_VERIFYPEER => false
));

$response = curl_exec($ch);

// 调试时可开启下一行输出CURL本身的错误
// if(curl_errno($ch)) echo 'CURL错误:' . curl_error($ch);

echo $response;

fclose($file_handle);
curl_close($ch);
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:05