tags:

views:

417

answers:

2

Hey all. I've been looking for a while for something that can help me out with this.

I'm writing a script that will login to Gamefly.com, and add 50 games to my queue. The queue part works fine enough, but the login simply won't work. I've read about using cURL before, and I noticed that PHP has a decent enough time with it. So here's what I've come up with:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.gamefly.com/member/logon/?ReturnUrl=http%3a%2f%2fwww.gamefly.com%2f');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'ctl00$ctl00$ctl00$MainContent$MainContent$MainContent$LoginForm$emailAddress=xxxx@xxxx.com&ctl00$ctl00$ctl00$MainContent$MainContent$MainContent$LoginForm$password=xxxx');
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
$test = curl_exec($ch);

Obviously, I think I'm getting the wrong fields when I do this. Does anyone have any ideas on how I can get it to login, or am I boned? Thanks.

+2  A: 

Try this:

// Curl.php

class Curl {

    public $cookieJar = "";

    // Make sure the cookies.txt file is read/write permissions
    public function __construct($cookieJarFile = '/var/www/html/cookies.txt') {
        $this->cookieJar = $cookieJarFile;
    }

    function setup() {
        $header = array();
        $header[0]  = "Accept: text/xml,application/xml,application/xhtml+xml,";
        $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
        $header[]   = "Cache-Control: max-age=0";
        $header[]   = "Connection: keep-alive";
        $header[]   = "Keep-Alive: 300";
        $header[]   = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
        $header[]   = "Accept-Language: en-us,en;q=0.5";
        $header[]   = "Pragma: "; // browsers keep this blank.

        curl_setopt($this->curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
        curl_setopt($this->curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($this->curl, CURLOPT_COOKIEJAR, $this->cookieJar);
        curl_setopt($this->curl, CURLOPT_COOKIEFILE, $this->cookieJar);
        curl_setopt($this->curl, CURLOPT_AUTOREFERER, true);
        curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
    }

    function get($url) {
        $this->curl = curl_init($url);
        $this->setup();

        return $this->request();
    }

    function getAll($reg, $str) {
        preg_match_all($reg, $str, $matches);
        return $matches[1];
    }

    function postForm($url, $fields, $referer = '') {
        $this->curl = curl_init($url);
        $this->setup();
        curl_setopt($this->curl, CURLOPT_URL, $url);
        curl_setopt($this->curl, CURLOPT_POST, 1);
        curl_setopt($this->curl, CURLOPT_REFERER, $referer);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $fields);
        return $this->request();
    }

    function getInfo($info) {
        $info = ($info == 'lasturl') ? curl_getinfo($this->curl, CURLINFO_EFFECTIVE_URL) : curl_getinfo($this->curl, $info);
        return $info;
    }

    function request() {
        return curl_exec($this->curl);
    }
}

How to call:

// Login.php

include('/var/www/html/curl.php'); // This path would change to where you store the file
$curl = new Curl();

$url = "https://www.gamefly.com/member/logon/?ReturnUrl=http%3a%2f%2fwww.gamefly.com%2f";
$fields = "ctl00$ctl00$ctl00$MainContent$MainContent$MainContent$LoginForm$emailAddress=xxxx@xxxx.com&ctl00$ctl00$ctl00$MainContent$MainContent$MainContent$LoginForm$password=xxxx";

// Calling URL
$referer = "http://www.gamefly.com";

$html = $curl->postForm($url, $fields, $referer);

echo $html; // This will show you the HTML of the current page you and logged into
Phill Pafford
I modified my code to use what you wrote, but it doesn't work. I'm pretty sure at this point, that I have incorrect fields when I submit the form or something else of that kind. I'll see if I can figure that out.
GIGGAS2
A: 

Code is broken

Al
not a particularly helpful answer.
Mr. Shiny and New