使用PHP+Guzzle请求Facebook.com时出现502 Bad Gateway错误求助
问题:使用Guzzle请求Facebook视频链接返回502 Bad Gateway,请求YouTube正常
我用PHP和Guzzle发送GET请求时,请求YouTube视频链接能正常返回200状态码,但请求Facebook的视频链接时,服务器返回502 Bad Gateway错误。
我的代码如下:
$client = new GuzzleHttp\Client(); $res = $client->request('GET', $url, [ 'headers' => ['User-Agent' => null] ]); $code = $res->getStatusCode();
测试的URL:
- https://www.youtube.com/watch?v=skSPHfkIMow:正常,返回200
- https://www.facebook.com/watch/?v=492187276105133&ref=sharing:报错,显示502 Bad Gateway
请问Facebook是否会拦截这类请求?
回答
Facebook确实会拦截这类请求,你的代码里设置User-Agent: null是核心问题之一。
主流网站大多有反爬机制,空User-Agent会被直接判定为非浏览器发起的请求,大概率会被拦截或返回错误状态码。YouTube在这方面的验证相对宽松,所以空User-Agent暂时能通过,但这不代表这种写法是合规的。
至于502 Bad Gateway,看起来是网关错误,但实际很多时候是Facebook反爬系统拒绝请求后,通过网关返回的伪装状态,并非真正的服务器网关故障。
给你两个解决方向:
- 给请求设置模拟浏览器的User-Agent,比如Chrome的标识:
$client = new GuzzleHttp\Client(); $res = $client->request('GET', $url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' ] ]); $code = $res->getStatusCode();
- 即使设置了User-Agent,Facebook还有可能通过Cookie、IP频率限制等方式拦截请求。如果后续仍有问题,建议使用Facebook官方API访问视频内容,这才是合规且稳定的方式。
内容的提问来源于stack exchange,提问作者superfive33
相关产品推荐
相关产品推荐

