我想提出一个PHP脚本,可以从网站获取的页面。 想的file_get_contents($网址)。
然而,这个网站需要您的用户名/密码,填写登录表格之前,您可以访问任何页面。 我想象,一旦登录,网站将您的浏览器身份验证Cookie,并与每一个浏览器随之而来的请求,会话信息被传递回的网站进行身份验证的访问。
我想知道我怎么可以为了获得与本网站获取的网页模拟与PHP脚本的浏览器的这种行为。
更具体地讲,我的问题是:
- 从而使网站与会话信息/ cookie的答复我如何发送包含我的登录细节的请求
- 如何阅读会话信息/饼干
- 我如何传回每随之而来的请求( 的file_get_contents, 卷曲 )到网站本次会议的信息。
谢谢。
卷曲是很好适合这样做。 你不需要做什么特别的东西以外设置CURLOPT_COOKIEJAR
和CURLOPT_COOKIEFILE
选项。 一旦你从网站传递表单域登录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;
}
该HTTP PECL扩展可以做到这一点,也PEAR :: HTTP_Client , 史努比和许多许多其他的库/类。 如果你(无论何种原因)你想,成就了这一file_get_contents
,您可以使用流上下文选项HTTP包装设置POST和cookie的参数和stream_get_meta_data读取响应头,包括饼干。