如何修改PHP中的cURL代码以调用指定GET API接口
修正PHP CURL代码以匹配API文档要求
根据你提供的API文档和现有代码,需要做出以下关键修改才能正确调用API:
核心问题与修改点
- 变量名不一致:原代码中
curl_init()赋值给$curl,但后续错误使用未定义的$ch设置请求头,需统一变量名为$curl。 - URL构造完全错误:
- 未替换API URL中的占位符
{type}和{query}:需用判断后的$param(email或phone)替换{type},用处理后的$param_val替换{query} - 错误添加了冗余的
/by-token?token=123=部分:API文档要求通过api-key请求头传递密钥,而非URL参数 - 正确URL格式应为:
https://example.com/api/v2/'.$param.'/'.$param_val.'?timeout=60
- 未替换API URL中的占位符
- 请求头缺失且被覆盖:原代码中先设置的
Accept: application/json被后续curl_setopt_array中的空HTTP头数组覆盖,需在数组中同时添加Accept: application/json和api-key: 123两个请求头。 - 未执行函数调用:接收
$_POST["keyword"]参数后,没有调用get_uid函数并输出结果。 - 错误处理不完善:捕获CURL错误后未返回或输出错误信息,需补充错误返回逻辑。
修正后的完整代码
<?php if(!isset($_POST["keyword"])) { echo "missing a required data"; exit; } function get_uid($param_val){ $curl = curl_init(); $param = "email"; if (!filter_var($param_val, FILTER_VALIDATE_EMAIL)) { $param = "phone"; $param_val = urlencode($param_val); } // 构造正确的API URL $url = "https://example.com/api/v2/{$param}/{$param_val}?timeout=60"; curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", // 添加正确的请求头 CURLOPT_HTTPHEADER => array( 'accept: application/json', 'api-key: 123' ), )); $response = curl_exec($curl); // 处理CURL错误 if (curl_errno($curl)) { $error_msg = curl_error($curl); curl_close($curl); return "CURL Error: " . $error_msg; } curl_close($curl); return $response; } // 调用函数并输出结果 echo get_uid($_POST["keyword"]); ?>
内容的提问来源于stack exchange,提问作者NewbieHD
相关产品推荐
相关产品推荐

