Login with curl and move to another page

前端 未结 3 1012
执笔经年
执笔经年 2020-12-20 13:46

I\'m trying to access one page in a website with CURL, however it needs to be logged in i tried the code to login and it was successful



        
相关标签:
3条回答
  • 2020-12-20 14:04

    First define these function to get an associative array containing the url header and content (see http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_using_curl):

    /**
     * Get a web file (HTML, XHTML, XML, image, etc.) from a URL.  Return an
     * array containing the HTTP server response header fields and content.
     */
    function get_web_page( $url, $params, $is_post = true )
    {
        $options = array(
            CURLOPT_RETURNTRANSFER => true,     // return web page
            CURLOPT_HEADER         => false,    // don't return headers
            CURLOPT_FOLLOWLOCATION => true,     // follow redirects
            CURLOPT_ENCODING       => "",       // handle all encodings
            CURLOPT_USERAGENT      => "Mozilla/4.0 (compatible;)", // i'm mozilla
            CURLOPT_AUTOREFERER    => true,     // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
            CURLOPT_TIMEOUT        => 120,      // timeout on response
            CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        );
    
        if($is_post) { //use POST
    
            $options[CURLOPT_POST] = 1;
            $options[CURLOPT_POSTFIELDS] = http_build_query($params);
    
        } else { //use GET
    
            $url = $url.'?'.http_build_query($params);
    
        }
    
        $ch      = curl_init( $url );
        curl_setopt_array( $ch, $options );
        $content = curl_exec( $ch );
        $err     = curl_errno( $ch );
        $errmsg  = curl_error( $ch );
        $header  = curl_getinfo( $ch );
        curl_close( $ch );
    
        $header['errno']   = $err;
        $header['errmsg']  = $errmsg;
        $header['content'] = $content;
        return $header;
    }
    

    try this to load the 'http://www.example.com/buy' after login is successful.

    // after curl login setup
    $exec = curl_exec($curl_crack);
    if(preg_match("/^you are logged|logout|successfully logged$/i",$exec))
    {
        // close login CURL resource, and free up system resources
        curl_close($curl_crack);
    
        $params = array('product_id'=>'xxxx', qty=>10);
        $url = 'http://www.example.com/buy';
    
        //use above function to get the url content via POST params
        $result = get_web_page($url, $params, true);
    
        if($result['http_code'] == 200) {
            //echo the content
            echo $result['content'];
            die();
        }
    }
    
    0 讨论(0)
  • 2020-12-20 14:07

    If you want to go to /buy after you log in, just use the same curl handle and issue another request for that page. cURL will retain the cookies for the duration of the handle (and on subsequent requests since you are saving them to a file and reading them back with the cookie jar.

    For example:

    $user_agent       = "Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20140319 Firefox/24.0 Iceweasel/24.4.0";
    $curl_crack = curl_init();
    
    CURL_SETOPT($curl_crack,CURLOPT_URL,"https://www.vininspect.com/en/account/login");
    CURL_SETOPT($curl_crack,CURLOPT_USERAGENT,$user_agent);
    CURL_SETOPT($curl_crack,CURLOPT_PROXY,"183.78.169.60:37899");
    CURL_SETOPT($curl_crack,CURLOPT_PROXYTYPE,CURLPROXY_SOCKS5);
    CURL_SETOPT($curl_crack,CURLOPT_POST,True);
    CURL_SETOPT($curl_crack,CURLOPT_POSTFIELDS,"LoginForm[email]=naceriwalid%40hotmail.com&LoginForm[password]=passwordhere&toploginform[rememberme]=0&yt1=&toploginform[rememberme]=0");
    CURL_SETOPT($curl_crack,CURLOPT_RETURNTRANSFER,True);
    CURL_SETOPT($curl_crack,CURLOPT_FOLLOWLOCATION,True);
    CURL_SETOPT($curl_crack,CURLOPT_COOKIEFILE,"cookie.txt"); //Put the full path of the cookie file if you want it to write on it
    CURL_SETOPT($curl_crack,CURLOPT_COOKIEJAR,"cookie.txt"); //Put the full path of the cookie file if you want it to write on it
    CURL_SETOPT($curl_crack,CURLOPT_CONNECTTIMEOUT,30);
    CURL_SETOPT($curl_crack,CURLOPT_TIMEOUT,30);  
    
    $exec = curl_exec($curl_crack);
    if(preg_match("/^you are logged|logout|successfully logged$/i",$exec))
    {
        $post = array('search' => 'keyword', 'abc' => 'xyz');
    
        curl_setopt($curl_crack, CURLOPT_POST, 1); // change back to GET
        curl_setopt($curl_crack, CURLOPT_POSTFIELDS, http_build_query($post)); // set post data
        curl_setopt($curl_crack, CURLOPT_URL, 'http://example.com/buy'); // set url for next request
    
        $exec = curl_exec($curl_crack); // make request to buy on the same handle with the current login session
    }
    

    Here are some other examples of using PHP & cURL to make multiple requests:

    How to login in with Curl and SSL and cookies (links to multiple other examples)

    Grabbing data from a website with cURL after logging in?

    Pinterest login with PHP and cURL not working

    Login to Google with PHP and Curl, Cookie turned off?

    PHP Curl - Cookies problem

    0 讨论(0)
  • 2020-12-20 14:10

    You just need to change the URL after login is compete and then run curl_exec Like this :

    <?php
    
    //login code goes here
    
    if(preg_match("/^you are logged|logout|successfully logged$/i",$exec))
    {
        echo "Logged in! now lets go to other page while we are logged in, shall we?";
        //The new URL that you want to go to while logged in goes in bottom line :
        CURL_SETOPT($curl_crack, CURLOPT_URL, "https://new_url_to_go.com/something");
        $exec = curl_exec($curl_crack);
        // now $exec contains the the content of new page with login
    } 
    
    
    curl_close($curl_crack);//dont forgert to close curl session at last
    ?>
    
    0 讨论(0)
提交回复
热议问题