如何使用file_get_contents传递X-Api-Key请求头获取接口数据
file_get_contents 发起请求时默认不会携带自定义请求头,因此无法通过需要X-API-Key的接口鉴权,你可以通过以下两种方式修改代码:
方案1:沿用file_get_contents实现(适合原有逻辑不动太多的场景)
你需要手动构造HTTP流上下文,把鉴权头传入请求:
// 替换为实际的接口地址 $apiUrl = 'XXXXX/history'; // 替换为你的实际X-API-Key值 $apiKey = '替换为你的API密钥'; // 构造请求配置 $options = [ 'http' => [ 'method' => 'GET', 'header' => "X-API-Key: $apiKey\r\n" // 如果有多个请求头,按格式追加即可,比如加Content-Type: // 'header' => "X-API-Key: $apiKey\r\nContent-Type: application/json\r\n" ] ]; $context = stream_context_create($options); // 发起带自定义头的请求 $response = file_get_contents($apiUrl, false, $context); $data1 = json_decode($response, true); var_dump($data1);
如果请求失败,可以先直接打印$response查看返回的原始内容,确认是鉴权失败还是接口返回了非JSON格式的错误信息。
方案2:使用cURL实现(兼容性更好,适合大部分PHP环境)
部分服务器会禁用file_get_contents的远程请求权限,用cURL兼容性更高:
$apiUrl = 'XXXXX/history'; $apiKey = '替换为你的API密钥'; $ch = curl_init($apiUrl); // 要求curl将响应结果作为返回值返回,而不是直接输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 传入自定义请求头 curl_setopt($ch, CURLOPT_HTTPHEADER, [ "X-API-Key: $apiKey" ]); // 如果接口是HTTPS且用了自签证书,可以临时打开下面两行跳过SSL验证,正式环境建议关闭 // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $response = curl_exec($ch); curl_close($ch); $data1 = json_decode($response, true); var_dump($data1);
内容的提问来源于stack exchange,提问作者Jamie Warren
相关产品推荐
相关产品推荐

