php 实现登录采集
PHP 实现登录采集的方法
使用 cURL 模拟登录
通过 cURL 库可以模拟用户登录行为,获取登录后的页面内容。
$loginUrl = 'https://example.com/login';
$username = 'your_username';
$password = 'your_password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'username' => $username,
'password' => $password
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$response = curl_exec($ch);
curl_close($ch);
保存会话信息
登录后需要保存会话信息(如 cookies),以便后续请求保持登录状态。
$targetUrl = 'https://example.com/protected-page';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$content = curl_exec($ch);
curl_close($ch);
处理重定向

某些网站登录后会进行重定向,需要设置 cURL 跟随重定向。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
解析登录表单
对于复杂的登录表单,可能需要先获取表单中的隐藏字段。

$loginPage = file_get_contents($loginUrl);
preg_match('/<input type="hidden" name="csrf_token" value="(.*?)"/', $loginPage, $matches);
$csrfToken = $matches[1];
使用 Guzzle HTTP 客户端
Guzzle 是一个更现代的 PHP HTTP 客户端,适合复杂的采集任务。
require 'vendor/autoload.php';
$client = new \GuzzleHttp\Client([
'cookies' => true
]);
$response = $client->post($loginUrl, [
'form_params' => [
'username' => $username,
'password' => $password
]
]);
$content = $client->get($targetUrl)->getBody()->getContents();
注意事项
- 确保遵守目标网站的 robots.txt 和服务条款
- 添加适当的用户代理头
- 处理可能的验证码机制
- 考虑请求间隔以避免被封禁
- 使用代理 IP 应对 IP 限制
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
curl_setopt($ch, CURLOPT_PROXY, 'proxy_ip:port');






