file_get_contents from url that is only accessible after log-in to website

前端 未结 2 1273
失恋的感觉
失恋的感觉 2020-12-09 05:55

I would like to make a php script that can capture a page from a website. Think file_get_contents($url).

However, this website requires that you fill in a u

2条回答
  •  鱼传尺愫
    2020-12-09 06:46

    Curl is pretty well suited to do it. You don't need to do anything special other than set the CURLOPT_COOKIEJAR and CURLOPT_COOKIEFILE options. Once you've logged in by passing the form fields from the site the cookie will be saved and Curl will use that same cookie for subsequent requests automatically as the example below illustrates.

    Note that the function below saves the cookies to cookies/cookie.txt so make sure that directory/file exists and can be written to.

    $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;
    }
    

提交回复
热议问题