PHP中带API密钥的Curl请求格式化及代码修正求助
修正后的Companies House API调用代码
嘿,作为Curl新手踩点坑太正常了,我帮你把代码改对,还会给你拆解每个关键部分:
你的原代码有几个核心问题:
- 把完整的curl命令塞进了
CURLOPT_URL,这是错的,这里只需要填API的纯URL就行 - 没设置API要求的Basic认证(Companies House规定用API Key作为用户名,密码留空)
- 没开启
CURLOPT_RETURNTRANSFER,导致curl直接输出结果而不是把内容存到变量里 - 缺少指定接受JSON的请求头,可能会导致返回格式不符合预期
修正后的完整代码
<?php // 替换成你的Companies House API Key $apiKey = '你的API密钥'; $apiUrl = 'https://api.companieshouse.gov.uk/search/companies'; $curl = curl_init(); // 设置API请求地址 curl_setopt($curl, CURLOPT_URL, $apiUrl); // 开启返回结果到变量,而非直接输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 设置Basic认证:API Key作为用户名,密码为空(冒号不能省略) curl_setopt($curl, CURLOPT_USERPWD, "$apiKey:"); // 告诉服务器我们需要JSON格式的响应 curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Accept: application/json' ]); // 本地测试可临时禁用SSL验证(生产环境建议开启,需配置证书) curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 执行请求并获取响应内容 $response = curl_exec($curl); // 检查请求是否出错 if(curl_errno($curl)){ echo 'Curl请求错误: ' . curl_error($curl); } // 关闭Curl资源 curl_close($curl); // 打印原始JSON结果 echo $response; ?>
关键细节说明
CURLOPT_USERPWD: 这是Companies House API的必填项,格式必须是API_KEY:,末尾的冒号代表密码为空,API会以此验证身份CURLOPT_RETURNTRANSFER: 开启这个选项后,curl_exec才会把响应内容返回给变量,而不是直接输出到页面上- 错误检查逻辑: 加上
curl_errno和curl_error能帮你快速排查请求失败的原因,比如API密钥错误、网络问题等
内容的提问来源于stack exchange,提问作者user2692997
相关产品推荐
相关产品推荐

