PHP - cURL模拟浏览器请求
封面图
•
2025-11-01
•
PHP
169
0
0
0
在 PHP 中使用 `cURL` 模拟浏览器请求是一种常见的做法,常用于爬虫、接口测试或模拟用户行为。通过设置合适的 HTTP 请求头(Headers),可以使得 cURL 请求看起来像一个真实的浏览器请求。 --- ## ✅ 一、基本的 cURL 示例 ```php <?php // 初始化一个 curl 句柄 $ch = curl_init(); // 设置 URL 和其他选项 curl_setopt($ch, CURLOPT_URL, "https://example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将 curl_exec 的结果返回,而不是输出 curl_setopt($ch, CURLOPT_HEADER, false); // 不包含响应头 // 执行请求 $response = curl_exec($ch); // 关闭 curl 句柄 curl_close($ch); // 输出响应内容 echo $response; ``` --- ## ✅ 二、模拟浏览器请求(添加 User-Agent) 很多网站会检测 `User-Agent` 来判断是否是爬虫。为了模拟浏览器,我们可以设置一个常见的浏览器 User-Agent: ```php <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'); $response = curl_exec($ch); curl_close($ch); echo $response; ``` --- ## ✅ 三、发送 POST 请求并模拟浏览器 ```php <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://example.com/login"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'username' => 'user123', 'password' => 'pass123' ])); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'); $response = curl_exec($ch); curl_close($ch); echo $response; ``` --- ## ✅ 四、设置 Cookie(模拟登录) 如果需要保持会话状态,可以通过 `CURLOPT_COOKIEJAR` 和 `CURLOPT_COOKIEFILE` 来保存和读取 cookies: ```php <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://example.com/login"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'username' => 'user123', 'password' => 'pass123' ])); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 ...'); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); // 保存 cookie 到文件 curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); // 从文件读取 cookie $response = curl_exec($ch); curl_close($ch); echo $response; ``` --- ## ✅ 五、设置 Referer(来源页面) 有些网站会检查 `Referer` 头来防止盗链或爬虫: ```php curl_setopt($ch, CURLOPT_REFERER, "https://example.com/"); ``` --- ## ✅ 六、完整示例:模拟浏览器访问网页 ```php <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随重定向 curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 超时时间 $response = curl_exec($ch); if ($response === false) { echo 'cURL Error: ' . curl_error($ch); } else { echo $response; } curl_close($ch); ``` --- ## 📌 注意事项 - **不要频繁请求**:避免被封 IP 或触发反爬机制。 - **遵守 robots.txt**:尊重网站的爬取规则。 - **处理 SSL 证书问题**(可选): ```php curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不验证 SSL 证书(不推荐) curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不验证主机名 ``` --- 如果你有具体的网站或需求(如登录、抓取特定内容等),我可以帮你定制更详细的代码!
上一篇:
用PHP编写PDF文档生成器
下一篇:
PHP gmdate() 函数
标题录入,一次不能超过6条
返回顶部
留言
留言
评论