如何正确发送GET请求?浏览器正常PHP无数据返回问题
解决PHP发送GET请求无法获取数据的问题
我帮你排查下代码里的问题,一步步来修正:
主要问题分析
你的代码里有几个关键错误导致请求失败:
- HTTP Header格式错误:多个请求头字段没有用换行符分隔,服务器无法正确解析这些头部信息
- 变量名拼写错误:输出时漏写了变量的美元符号
- 未处理压缩响应:请求头声明接受gzip压缩,但默认没有解压逻辑
修正后的代码
<?php // 修正header格式:每个字段用\r\n分隔,最后追加\r\n结束头部 $headers = implode("\r\n", [ "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0", "Accept-Encoding: gzip, deflate", "Accept: */*" ]) . "\r\n"; $opts = [ 'http' => [ 'method' => "GET", 'proxy' => $proxy, // 确保$proxy变量是正确的格式,比如tcp://ip:port 'header' => $headers ] ]; $context = stream_context_create($opts); $url2 = "http://50.7.195.2:25461/live/***/***/6089.m3u8?token=HxZZBUsLRgMaAAAIUwpWAwcMCgUGWg8OAwBTCwBWVQFVDFBQXFoADFpEHBIRRkJRBFRnWVQbAw5VW18UFkdEABZrWAAaWUYNAVcCCEAeEkAMVF0SCgkVGhUKAhoOEAZVUw0CRhRBAUFMA0JeA15vUABPUVNVGwNWEA8KFBZdWToAUVwFVgdGAxpWEhxAW0NERwMaeRB/WEsRLQNMFH5jIUYYEwZRFxZYTAMSCkADBw1XGxQSU1ZMVhERHxoOEHAnRhgTAUAXAVdLD19eQAgSWVZMABIcG1BLOhEDS0BAUgQJUUNGAkFUGxREXVEabVNbC1ddU0RQVlYWQVwaBRAbRwlbXw1MDBZmSA9UElgQAQNdDgsSTQ=="; $data = file_get_contents($url2, false, $context); // 处理gzip压缩的响应 if (function_exists('gzdecode') && !empty($http_response_header)) { foreach ($http_response_header as $header) { if (strpos($header, 'Content-Encoding: gzip') !== false) { $data = gzdecode($data); break; } } } echo $data; // 修正变量名,加上$ ?>
额外说明
- 代理格式检查:确保
$proxy变量的格式正确,比如tcp://127.0.0.1:8080,HTTP代理通常采用这种格式。 - 错误调试:可以开启PHP错误提示(
error_reporting(E_ALL); ini_set('display_errors', 1);),这样能看到请求过程中的具体错误信息,方便进一步排查。 - 更可靠的替代方案:如果
file_get_contents还是有问题,推荐使用cURL库,它对HTTP请求的支持更灵活,调试也更方便:
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url2); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0"); curl_setopt($ch, CURLOPT_ACCEPT_ENCODING, "gzip, deflate"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 可选:关闭SSL验证(如果目标站点证书有问题) // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $data = curl_exec($ch); // 处理压缩响应 if (curl_getinfo($ch, CURLINFO_CONTENT_ENCODING) === 'gzip' && function_exists('gzdecode')) { $data = gzdecode($data); } // 检查cURL错误 if (curl_errno($ch)) { echo 'cURL Error: ' . curl_error($ch); } curl_close($ch); echo $data; ?>
内容的提问来源于stack exchange,提问作者golar
相关产品推荐
相关产品推荐

