Search code examples
perllwplwp-useragentway2sms

Automating sms sending by through Way2sms in Perl


I am trying to send sms through Way2sms using Perl LWP. The login part is being successful, after which I save the cookies to a local file. The welcome page after being logged in shows a Send SMS link, clicking on which one is redirected to another page with two inputs for mobile number and sms text and a button for submitting and sending the sms. Firebug reveals the page structure as shown in the figure. From the Iframe url and the form's action attribute, I constructed the form action's absolute URL and submit the form accordingly, with the cookie stored in the file. However, the sms isn't sent. What I am doing wrong here? The code is as follows. (The name attributes for the two text inputs are correct, taken by observing the source code in Firebug, although that's not included in the image)

use LWP::UserAgent;
open f, "> way2sms.txt";
use HTTP::Cookies;
my $cookie_jar = HTTP::Cookies->new(
file => "cookies.txt",
autosave => 1,
);

my $ua = LWP::UserAgent->new(
    agent =>
      'Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1',
    cookie_jar => $cookie_jar,
);
my $response = $ua->post(
    'http://site2.way2sms.com/contentt/bar/Login1.action',
    {
        username => $user,
        password => $pass,
    }
);

if ( $response->is_redirect ) {
    $response = $ua->get( $response->header('Location') );
    print 5 if $response->decoded_content =~ /Kaustav Mukherjee/i; #prints it, showing that the login is successful
}   
my $smsresp = $ua->post("http://site5.way2sms.com/jsp/quicksms.action",[MobNo=>$mob,textArea=>'Hello World']);

enter image description here


Solution

  • WORKING SCRIPT: (Tested on 6/Sep/2012 3:00 PM GMT+5:30)

        use LWP::UserAgent;
        use HTTP::Cookies;
    
        my $ua = LWP::UserAgent->new(agent=>"Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1");
    
        $ua->cookie_jar({ file => "/absolute/path/to/cookies.txt", autosave => 1 });
        # if windows, use \ instead of /
    
        # $ua->proxy(['http', 'ftp'], 'http://localhost:9666/');
    
        # below line seems to have done the trick
        push @{ $ua->requests_redirectable }, 'POST';
    
        my $response = $ua->post(
                'http://site5.way2sms.com/Login1.action',{
                "username" => "1234567890", # set your username
                "password" => "passwd0123", # set your password
                "userLogin" => "yes",
                "message" => "",
                "mobileNo" => "",
                }
        );
    
        if($response->is_success && $response->decoded_content =~ /Logout/i){ # you can have your name too in place of Logout
                print "Logged in!\r\n";
        }
    
        my $mob = "1234567890"; # mobile to send message to
        my $mes = "Hello! 123."; # message
    
        my $smsresp = $ua->post(
                "http://site5.way2sms.com/quicksms.action",
                {
                        'Action' => 'dsf45asvd5',
                        'HiddenAction' => 'instantsms',
                        'catnamedis' => 'Birthday',
                        'chkall' => 'on',
                        'MobNo' => $mob,
                        'textArea' => $mes,
                });
    
         if ($smsresp->is_success && $smsresp->decoded_content =~ /Submitted/i) {
             print "Sent!\r\n";
         }
    

    P.S. I wish I could get that expired bounty O_o :)