PHP Curl请求目标URL返回结果与浏览器不一致的问题求助
问题分析与解决方案
我之前处理过不少类似的反爬场景,这种Curl返回结果和浏览器不一致的情况,大多是因为网站的反爬机制识别出你的请求不是来自真实浏览器,直接返回了假的空结果。咱们一步步来排查和修复:
核心原因
- 关键请求头缺失:浏览器发送请求时会带上一堆标识自身的头信息(比如语言偏好、内容类型支持等),你的Curl只设置了User-Agent和Referer,缺少了网站用来验证请求合法性的核心字段。
- User-Agent格式异常:你设置的UA把Firefox、Chrome的信息混在一起了,这种拼接出来的UA很容易被反爬系统判定为异常请求。
- Cookie初始化问题:虽然你配置了CookieJar,但第一次请求时没有任何初始Cookie,而浏览器访问时会自动接收网站设置的会话Cookie,这也可能导致网站拒绝提供真实结果。
调整后的Curl配置
直接给你修改好的代码,我会标注关键改动:
// 初始化Curl句柄 $ch = curl_init(); $cookies = 'cookies.txt'; // 确保这个文件有读写权限 // 目标URL curl_setopt($ch, CURLOPT_URL, 'https://www.segundamano.mx/anuncios/ciudad-de-mexico/alvaro-obregon/florida/renta-inmuebles/departamentos?precio=0-10000'); // Cookie处理:自动保存和加载Cookie curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); // 基础配置 curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 建议开启SSL验证(如果网站证书没问题的话),关闭有安全风险 // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 关键改动1:使用真实单一的Chrome User-Agent $uagent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'; curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // 关键改动2:添加浏览器常用的请求头 $headers = array( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language: es-MX,es;q=0.8,en-US;q=0.5,en;q=0.3', // 匹配网站的西班牙语环境 'Accept-Encoding: gzip, deflate, br', 'Connection: keep-alive', 'Upgrade-Insecure-Requests: 1' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 保留Referer和自动Referer设置 curl_setopt($ch, CURLOPT_REFERER, 'https://www.google.com'); curl_setopt($ch, CURLOPT_AUTOREFERER, true); // 执行请求并获取结果 $response = curl_exec($ch); curl_close($ch); // 可以打印结果看看 echo $response;
额外注意事项
- 确保
cookies.txt文件有读写权限,否则Curl无法保存Cookie,后续请求还是会被拦截。 - 如果还是不行,可以先模拟请求网站的首页(
https://www.segundamano.mx/),获取初始会话Cookie后,再请求目标搜索页,这样更贴近浏览器的访问流程。 - 不要频繁发送请求,避免触发网站的频率限制,必要时可以添加随机延迟。
内容的提问来源于stack exchange,提问作者user1228739
相关产品推荐
相关产品推荐

