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

PHP调用TwelveData API返回400错误,Python调用正常求助

排查PHP调用TwelveData API返回400错误的问题

1. 修复URL参数编码问题

PHP的file_get_contents不会自动处理URL参数的编码,而Python请求库默认会完成这一步。即便测试用的ticker是AAPL,若实际场景中参数包含特殊字符(比如带点、空格),就会触发API的参数校验错误。

替换原URL拼接方式,用http_build_query自动完成参数编码:

$params = [
    'symbol' => $ticker,
    'apikey' => $TDKEY
];
$url = "https://api.twelvedata.com/price?" . http_build_query($params);

2. 清理参数中的隐形字符

$_POST['stock']可能携带首尾空格、换行等不可见字符,导致symbol参数不符合API要求。先对参数做清理:

$ticker = trim($_POST['stock']);
// 可选:打印参数详情确认是否存在异常字符
var_dump($ticker);

3. 对比PHP与Python生成的完整URL

把PHP生成的完整URL打印出来,和Python请求时用的URL逐一比对,看是否存在参数顺序、编码差异或参数缺失:

echo $url; // 输出完整URL,和Python的请求URL做对比

4. 改用cURL替代file_get_contents

file_get_contents对HTTPS请求的支持受环境配置限制(比如allow_url_fopen关闭、SSL证书问题),改用cURL更稳定,也便于调试:

if (isset($_POST['stock']))
{
    $ticker = trim($_POST['stock']);
    $params = [
        'symbol' => $ticker,
        'apikey' => $TDKEY
    ];
    $url = "https://api.twelvedata.com/price?" . http_build_query($params);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 调试时可开启查看请求细节
    // curl_setopt($ch, CURLOPT_VERBOSE, true);
    $json = curl_exec($ch);
    curl_close($ch);
    
    $data = json_decode($json, true);
    print_r($ticker . " price: " . ($data['price'] ?? 'N/A'));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:24