从URL的file_get_contents是登录网站后,才可访问(file_get_content

2019-06-24 23:49发布

我想提出一个PHP脚本,可以从网站获取的页面。 想的file_get_contents($网址)。

然而,这个网站需要您的用户名/密码,填写登录表格之前,您可以访问任何页面。 我想象,一旦登录,网站将您的浏览器身份验证Cookie,并与每一个浏览器随之而来的请求,会话信息被传递回的网站进行身份验证的访问。

我想知道我怎么可以为了获得与本网站获取的网页模拟与PHP脚本的浏览器的这种行为。

更具体地讲,我的问题是:

  1. 从而使网站与会话信息/ cookie的答复我如何发送包含我的登录细节的请求
  2. 如何阅读会话信息/饼干
  3. 我如何传回每随之而来的请求( 的file_get_contents, 卷曲 )到网站本次会议的信息。

谢谢。

Answer 1:

卷曲是很好适合这样做。 你不需要做什么特别的东西以外设置CURLOPT_COOKIEJARCURLOPT_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;
}


Answer 2:

该HTTP PECL扩展可以做到这一点,也PEAR :: HTTP_Client , 史努比和许多许多其他的库/类。 如果你(无论何种原因)你想,成就了这一file_get_contents ,您可以使用流上下文选项HTTP包装设置POST和cookie的参数和stream_get_meta_data读取响应头,包括饼干。



文章来源: file_get_contents from url that is only accessible after log-in to website