Php 文件\u从url获取内容,只有登录到网站后才能访问该内容
我想做一个php脚本,可以从一个网站捕获一个页面。思考文件获取内容($url) 但是,本网站要求您在访问任何页面之前填写用户名/密码登录表。我设想,一旦登录,网站会向您的浏览器发送一个身份验证cookie,随后的每个浏览器请求都会将会话信息传递回网站以对访问进行身份验证 我想知道如何用php脚本模拟浏览器的这种行为,以便访问和捕获该网站的页面 更具体地说,我的问题是:Php 文件\u从url获取内容,只有登录到网站后才能访问该内容,php,authentication,session,curl,file-get-contents,Php,Authentication,Session,Curl,File Get Contents,我想做一个php脚本,可以从一个网站捕获一个页面。思考文件获取内容($url) 但是,本网站要求您在访问任何页面之前填写用户名/密码登录表。我设想,一旦登录,网站会向您的浏览器发送一个身份验证cookie,随后的每个浏览器请求都会将会话信息传递回网站以对访问进行身份验证 我想知道如何用php脚本模拟浏览器的这种行为,以便访问和捕获该网站的页面 更具体地说,我的问题是: 我如何发送一个请求 包含我的登录详细信息,以便 网站会在会议结束后回复 信息/cookie 我如何阅读课时 信息/cookie
如果您(出于任何原因)希望通过
文件获取内容来实现这一点,可以使用设置POST和cookie参数,并读取包括cookie在内的响应头。Curl非常适合这样做。除了设置CURLOPT_-COOKIEJAR
和CURLOPT_-COOKIEFILE
选项之外,您不需要做任何特殊的事情。通过从站点传递表单字段登录后,cookie将被保存,Curl将自动在后续请求中使用相同的cookie,如下例所示
请注意,下面的函数将cookie保存到cookies/cookie.txt
,以便确保目录/文件存在并且可以写入
$loginUrl = 'http://example.com/login'; //action from the login form
$loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values
$remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save
$login = getUrl($loginUrl, 'post', $loginFields); //login to the site
$remotePage = getUrl($remotePageUrl); //get the remote page
function getUrl($url, $method='', $vars='') {
$ch = curl_init();
if ($method == 'post') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt');
$buffer = curl_exec($ch);
curl_close($ch);
return $buffer;
}
这对我来说仍然很有效。如果对您不起作用,请检查a)您已提供所有必需的表单字段,b)您的cookies.txt文件可写。提示:请仔细查看表单是否包含登录所需的隐藏字段。此方法不再有效。1) 当他们检测到您试图使用此方法登录时,他们现在需要一个captcha字段。2) 表单名称和详细信息已更改。