Search code examples
phpcurlups

how to login to UPS.com with php cURL


I need a circa 2012 example of how to login to UPS using PHP cURL. I am not closing the session between calls. There are 3 pages to be fetched, 1) The login page 2) The password page and 3) the invoice page

I had it work before, however it doesn't anymore. I deleted the cookie file and it worked for a while, then I get the message "Your current request has timed out due to inactivity. You will need to restart your request." If I don't login within a window it times out even on a successful login. I tried deleting the cookie file and starting again and that didn't work. Any ideas how to make it so the timeout window is infinite? Here's the code I have, credentials removed:

              $cookie_file_path = "/tmp/cookie.txt";
              // remove previous cookie
              if (file_exists($cookie_file_path)) {
            `rm -fr {$cookie_file_path}`;
              } 
            $login_url = 'https://www.ups.com/one-to-one/login';
            $password_url = 'https://www.ups.com/one-to-one/password';
            $invoice_url = 'upsDOTcomSLASHviewbillSLASHinvoices';
            $agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0";

            $login_data = "sysid=null&lang=null&langc=null&method=null&returnto=null&loc=en_US&uid=<user_id>&rememberMe=1&next=Next&pm_fp=version%253D1%2526pm%255Ffpua%253Dmozilla%252F5%252E0%2520%2528windows%2520nt%25206%252E1%253B%2520wow64%253B%2520rv%253A10%252E0%2529%2520gecko%252F20100101%2520firefox%252F10%252E0%257C5%252E0%2520%2528Windows%2529%257CWin32%2526pm%255Ffpsc%253D24%257C1920%257C1200%257C1160%2526pm%255Ffpsw%253D%257Cqt6%257Cqt5%257Cqt4%257Cqt3%257Cqt2%257Cqt1%257Cswf%257Cpdf%257Cpdf%2526pm%255Ffptz%253D%252D5%2526pm%255Ffpln%253Dlang%253Den%252DUS%257Csyslang%253D%257Cuserlang%253D%2526pm%255Ffpjv%253D1%2526pm%255Ffpco%253D1";
            $password_data = "sysid=null&lang=null&langc=null&method=null&returnto=null&loc=en_US&password=<password>&next=Log+In&pm_fp=version%253D1%2526pm%255Ffpua%253Dmozilla%252F5%252E0%2520%2528windows%2520nt%25206%252E1%253B%2520wow64%253B%2520rv%253A10%252E0%2529%2520gecko%252F20100101%2520firefox%252F10%252E0%257C5%252E0%2520%2528Windows%2529%257CWin32%2526pm%255Ffpsc%253D24%257C1920%257C1200%257C1160%2526pm%255Ffpsw%253D%257Cqt6%257Cqt5%257Cqt4%257Cqt3%257Cqt2%257Cqt1%257Cswf%257Cpdf%257Cpdf%2526pm%255Ffptz%253D%252D5%2526pm%255Ffpln%253Dlang%253Den%252DUS%257Csyslang%253D%257Cuserlang%253D%2526pm%255Ffpjv%253D1%2526pm%255Ffpco%253D1";

            $headers[] = "Accept: */*";
            $headers[] = "Connection: Keep-Alive";
            $headers[] = "Content-Type: application/x-www-form-urlencoded";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $login_url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
            curl_setopt($ch, CURLOPT_USERAGENT, $agent);
            curl_setopt($ch, CURLOPT_POST, 1); 
            curl_setopt($ch, CURLOPT_POSTFIELDS, $login_data); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_REFERER, 'https://www.ups.com/myups/login'); 
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
            ob_start();
            $result = curl_exec ($ch);
            ob_end_clean();
            echo curl_error($ch);   // prints nothing if successful
            //curl_close($ch);


            //$ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $password_url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
            curl_setopt($ch, CURLOPT_HEADER, 1);
            curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
            curl_setopt($ch, CURLOPT_POST, 1); 
            curl_setopt($ch, CURLOPT_POSTFIELDS, $password_data); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
            curl_setopt($ch, CURLOPT_REFERER, $login_url); 
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
            ob_start();
            $result = curl_exec ($ch);
            ob_end_clean();
            echo curl_error($ch)        // prints nothing if successful
            //curl_close($ch);


            //$ch = curl_init();
           curl_setopt($ch, CURLOPT_URL, $invoice_url);
           curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/html; charset=utf-8'));
           curl_setopt($ch, CURLOPT_HEADER, 1);
            curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
            curl_setopt($ch, CURLOPT_POST, 1); 
            curl_setopt($ch, CURLOPT_POSTFIELDS, $invoice_data); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
            curl_setopt($ch, CURLOPT_REFERER, $password_url);
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
            ob_start(); 
            $result = curl_exec ($ch);
            ob_end_clean();
            echo curl_error($ch);       // prints nothing if successful
            curl_close($ch);

I can't get past the first login page even after deleting and re-creating cookie file, as I get:

Your current request has timed out due to inactivity. You will need to restart your request.

Any help is appreciated.


Solution

    1. Try connecting from another server. Maybe you got blacklisted.
    2. Play with CURLOPT_FRESH_CONNECT or CURLOPT_FORBID_REUSE curl options.
    3. Visit login page before submiting the post data