PHP/CURL/simple-html-dom无法获取解析网页:特定URL请求失败
解决curl请求ontario.ca返回"ERROR: The request could not be satisfied"的问题
这个错误是因为ontario.ca的反爬机制识别出你的请求是由curl工具发起的(默认User-Agent特征太明显),直接拦截了这类非浏览器请求,而Google对基础爬虫请求的限制相对宽松,所以能正常返回内容。
解决方法很简单,给curl请求添加符合浏览器特征的请求头,核心是设置正确的User-Agent:
- 启用
CURLOPT_USERAGENT配置,替换成真实浏览器的User-Agent字符串 - 可选:补充
Accept、Accept-Language等常见请求头,让请求更贴近浏览器行为
修改后的代码示例:
require_once ('simple_html_dom.php'); $url="https://www.ontario.ca/page/2024-ontario-immigrant-nominee-program-updates"; $base = $url; $curl = curl_init(); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_URL, $base); curl_setopt($curl, CURLOPT_REFERER, $base); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 设置Chrome浏览器的User-Agent curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'); // 补充常见请求头 curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3' ]); $str = curl_exec($curl); // 新增curl错误排查 if(curl_errno($curl)){ echo 'Curl error: ' . curl_error($curl); } curl_close($curl); $html = new simple_html_dom(); $html->load($str); var_dump($html);
注意:User-Agent可以根据当前主流浏览器版本调整,避免使用过于老旧的标识;如果后续仍被拦截,可以尝试添加Cookie头(先通过浏览器访问获取有效Cookie)或设置请求间隔,模拟人类访问节奏。
内容的提问来源于stack exchange,提问作者sofname
相关产品推荐
相关产品推荐

