如何修复PHP中的HTTP请求?调用http_request()未定义函数报错
修复PHP Clash Royale API请求的致命错误
这个错误指向非常明确:Call to undefined function http_request(),问题出在你调用了一个根本不存在的函数,而且代码里还有重复请求的冗余逻辑。我来帮你一步步搞定:
问题根源拆解
- PHP没有内置
http_request()函数,你也没自己实现这个函数,所以调用时直接触发致命错误。 - 你前面已经通过curl完成了API请求,并且把响应结果存在了
$result变量里,但后面又画蛇添足地调用这个不存在的函数,完全是多余操作。 - 还有个隐藏坑:你的Authorization头用单引号包裹,里面的
$CRapi变量不会被解析成实际的API密钥,这会导致API请求鉴权失败(就算前面的函数问题解决了,API也会返回权限错误)。
修复后的完整代码
<?php // Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/ include 'config/api.php'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.clashroyale.com/v1/players/%238CCURC2G'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); $headers = array(); $headers[] = 'Accept: application/json'; // 修复变量解析:用双引号让$CRapi被替换成实际密钥,两种写法二选一都可以 $headers[] = "Authorization: Bearer $CRapi"; // 另一种写法:$headers[] = 'Authorization: Bearer ' . $CRapi; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); if (curl_errno($ch)) { echo 'Error:' . curl_error($ch); } curl_close ($ch); // 直接使用curl返回的$result进行JSON解码,去掉无效的http_request调用 $profile = json_decode($result, TRUE); echo "<pre>"; print_r($profile); echo "</pre>"; ?>
关键修改说明
- 移除冗余的
http_request()调用:直接复用curl请求得到的$result变量,彻底避免调用未定义函数的问题。 - 修复Authorization头的变量解析:把单引号改成双引号,PHP会自动解析里面的
$CRapi变量;或者用字符串拼接的方式,两种写法都能正确传递你的API密钥。 - 简化逻辑流程:从curl初始化、参数设置、请求执行、错误处理到JSON解码,整个流程连贯无冗余,减少出错概率。
如果之后你需要一个可复用的HTTP请求函数,也可以自己封装curl逻辑,但在这个场景下完全没必要,直接用现有的curl结果就足够了。
内容的提问来源于stack exchange,提问作者user9851053
相关产品推荐
相关产品推荐

