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
相关产品推荐
相关产品推荐

