How to fill a form after successful login

949 views Asked by At

I am trying to send sms via way2sms using HttpComponents. So far the login attempt to the site is successful, as the login history of the website clearly shows it and I am able to get the JSESSIONID successfully from the cookie. However the code somehow fails to send the sms itself. Instead, the response to the final POST request is the HTML page showing the blank text fields for msg and receiver's number. Please let me know where am I going wrong? Here is my code with username and password omitted for obvious reasons:

import java.io.*;
import java.util.ArrayList;
import java.util.List;
//import java.util.regex.*;
//import java.net.*;
//import java.util.Vector;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.*;
import org.apache.http.impl.client.*;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.entity.GzipDecompressingEntity;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.protocol.ClientContext;
/*import org.apache.http.client.entity.*;
import org.apache.http.client.utils.*;*/
import org.apache.http.cookie.ClientCookie;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.cookie.*;
import org.apache.http.cookie.params.*;

public class way2
{
    public static void main(String args[]) throws IOException {

    System.out.println("1");
    String url;
    String temp;
    String msg="If you get this msg plz fwd to Harsh";
    CookieStore MycookieStore;
    String cookiename=null;String cookievalue=null;


    DefaultHttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET,"UTF-8");
    httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT,"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1");
    httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,CookiePolicy.BROWSER_COMPATIBILITY );
    httpclient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS,false);
    // Prepare a request object for getting session id
    url="http://site5.way2sms.com/content/index.html";
    httpclient.addRequestInterceptor(new HttpRequestInterceptor() {

        public void process(final HttpRequest request,final HttpContext context) throws HttpException, IOException 
        {

        if (!request.containsHeader("Accept")) {
            request.addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        }
        if (!request.containsHeader("Accept-Encoding")) {
            request.addHeader("Accept-Encoding", "gzip, deflate");
        }
        if (!request.containsHeader("DNT")) {
            request.addHeader("DNT", "1");
        }
        if (!request.containsHeader("Connection")) {
            request.addHeader("Connection", "keep-alive");
        }
        }

    });
    httpclient.addResponseInterceptor(new HttpResponseInterceptor() {


        public void process(
            final HttpResponse response, 
            final HttpContext context) throws HttpException, IOException {
        HttpEntity entity = response.getEntity();
        Header ceheader = entity.getContentEncoding();
        if (ceheader != null) {
            HeaderElement[] codecs = ceheader.getElements();
            for (int i = 0; i < codecs.length; i++) {
            if (codecs[i].getName().equalsIgnoreCase("gzip")) {
                response.setEntity(
                    new GzipDecompressingEntity(response.getEntity())); 
                return;
            }
            }
        }
        }

    });

    HttpGet httpget = new HttpGet(url);
    System.out.println(httpget.getAllHeaders());
    System.out.println("1.2");

    // Execute the request
    HttpResponse response = httpclient.execute(httpget);
    System.out.println("2");

    // Examine the response status
    System.out.println(response.getStatusLine());

    // Get hold of the response entity
    HttpEntity entity = response.getEntity();
    System.out.println("3");
    if (entity != null) {

        try {

        BufferedReader reader = new BufferedReader(
            new InputStreamReader(entity.getContent()));



        } catch (IOException ex) {

        throw ex;

        } catch (RuntimeException ex) {

        httpget.abort();
        throw ex;

        }
        EntityUtils.consume(entity);
    }
    //GET request over

    //START OF Code for automatic login and storing cookies
    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    nvps.add(new BasicNameValuePair("username", "********"));
    nvps.add(new BasicNameValuePair("password","********"));
    nvps.add(new BasicNameValuePair("button","Login"));

    url = "http://site5.way2sms.com/Login1.action";
    HttpPost httppost= new HttpPost(url);
    httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
    httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.ISO_8859_1));

    response = httpclient.execute(httppost);
    entity = response.getEntity();

    BufferedReader in = new BufferedReader(new InputStreamReader(entity.getContent()));

    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
    }

    EntityUtils.consume(entity);
    MycookieStore = httpclient.getCookieStore();
    List<Cookie> Mycookies = MycookieStore.getCookies();
    ClientCookie ck=null; 
    httpclient.setCookieStore(MycookieStore);
    if (Mycookies.isEmpty()) {
        System.out.println("None");
    } else {
        for (int i = 0; i < Mycookies.size(); i++) {
        ck=(ClientCookie) Mycookies.get(i);
        System.out.println("-hola " + ck.toString());
        System.out.println("-hola " + ck.getComment());
        System.out.println("-hola " + ck.getCommentURL());
        System.out.println("-hola " + ck.getDomain());
        System.out.println("-hola " + ck.getName());
        cookiename = ck.getName();
        cookievalue = ck.getValue();
        System.out.println("-hola " + ck.getPath());
        System.out.println("-hola " + ck.getValue());
        }
    }

    //END OF Code for automatic login  and storing cookies
    //WAY2SMS lets you login till this point
    //get unique id now

    url = "http://site5.way2sms.com/quicksms.action";
    List<NameValuePair> nvps1 = new ArrayList<NameValuePair>();
    nvps1.add(new BasicNameValuePair("HiddenAction", "instantsms"));             
    nvps1.add(new BasicNameValuePair("catnamedis","Birthday"));
    nvps1.add(new BasicNameValuePair("Action","sa65sdf656fdfd"));
    nvps1.add(new BasicNameValuePair("chkall","on"));
    nvps1.add(new BasicNameValuePair("MobNo","*********"));
    nvps1.add(new BasicNameValuePair("textArea",msg));
    nvps1.add(new BasicNameValuePair("bulidguid","username"));
    nvps1.add(new BasicNameValuePair("bulidgpwd","*******"));
    nvps1.add(new BasicNameValuePair("bulidyuid","username"));
    nvps1.add(new BasicNameValuePair("bulidypwd","*******"));
    nvps1.add(new BasicNameValuePair("guid1","username"));
    nvps1.add(new BasicNameValuePair("gpwd1","*******"));
    nvps1.add(new BasicNameValuePair("yuid1","username"));
    nvps1.add(new BasicNameValuePair("ypwd1","*******"));
    nvps1.add(new BasicNameValuePair("button","Send SMS"));

    url = "http://site5.way2sms.com/quicksms.action";
    //url="http://site5.way2sms.com/jsp/InstantSMS.jsp";
    HttpGet sendsms= new HttpGet(url);
    sendsms.addHeader("Content-Type", "application/x-www-form-urlencoded");
    sendsms.addHeader("Referer", "http://site5.way2sms.com/jsp/InstantSMS.jsp");
//  sendsms.setEntity(new UrlEncodedFormEntity(nvps1, HTTP.ISO_8859_1));
    sendsms.setHeader("Cookie", ck.getName()+"="+ck.getValue());
    HttpContext localContext = new BasicHttpContext();

    localContext.setAttribute(ClientContext.COOKIE_STORE, MycookieStore);

    response = httpclient.execute(sendsms, localContext);


    entity = response.getEntity();
    BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));
    EntityUtils.consume(entity);


    httpclient.getConnectionManager().shutdown();
    System.out.println("1");

    }

}

I am using the following PHP code as a reference. This code works perfectly:

<html> 
<body>
<?php 
 function send_sms($userID,$userPWD,$recerverNO,$message)
{
     if(strlen($message)>140) // check for message length
     {echo "message length exceeds 140 characters" ; exit(); }

     $message_urlencode=rawurlencode($message); // message converted into URL encoded form
     $cookie_file_path ="/var/www/cookie.txt";
    // Cookie file location in your machine with full read and write permission

//START OF Code for getting sessionid
    $url="http://site5.way2sms.com/content/index.html";
    $header_array[0] = "GET /content/index.html HTTP/1.1";
    $header_array[1]= "Host: site5.way2sms.com";
    $header_array[2]= "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1";
    $header_array[3]= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    $header_array[4]= "Accept-Language: en-us,en;q=0.5";
    $header_array[5]= "Accept-Encoding: gzip,deflate";
    $header_array[6]= "DNT: 1";
    $header_array[7] = "Connection: keep-alive";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
    curl_setopt($ch, CURLOPT_REFERER, $reffer);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    $result = curl_exec ($ch);
    curl_close ($ch);
//END OF Code for getting sessionid

//START OF Code for automatic login and storing cookies
    $post_data = "username=".$userID."&password=".$userPWD."&button=Login";
    $url = "http://site5.way2sms.com/Login1.action";
    $header_array[0]="POST /Login1.action HTTP/1.1";
    $header_array[1]="Host: site5.way2sms.com";
    $header_array[2]="User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1";
    $header_array[3]="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    $header_array[4]="Accept-Language: en-us,en;q=0.5";
    $header_array[5]="Accept-Encoding: gzip, deflate";
    $header_array[6]="DNT: 1";
    $header_array[7]="Connection: keep-alive";
    $header_array[8]="Content-Type: application/x-www-form-urlencoded";
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
    curl_setopt($ch,CURLOPT_REFERER,"http://site5.way2sms.com/content/index.html");
    $content = curl_exec( $ch );
    $response = curl_getinfo( $ch );
    curl_close ($ch);
//END OF Code for automatic login  and storing cookies

// START OF Code is  getting way2sms unique user ID
    $url = "http://site5.way2sms.com/jsp/InstantSMS.jsp";
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $content = curl_exec($ch);
    curl_close ($ch);
    $regex = '/input type="hidden" name="Action" id="Action" value="(.*)"/';
    preg_match($regex,$content,$match);
    $userID = $match[1];
    echo $userID ;
// END OF Code for getting way2sms unique user ID

// START OF Code for sending SMS to Recever
    $post_data = "HiddenAction=instantsms&catnamedis=Birthday&Action=".$userID."&chkall=on&MobNo=".$recerverNO."&textArea=".$message_urlencode."&bulidguid=username&bulidgpwd=*******&bulidyuid=username&bulidypwd=*******&guid1=username&gpwd1=*******&yuid1=username&ypwd1=*******";
    $url = "http://site5.way2sms.com/quicksms.action";
    $header_array[0]="POST /quicksms.action HTTP/1.1";
    $header_array[1]="Host: site5.way2sms.com";
    $header_array[2]="User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1";
    $header_array[3]="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    $header_array[4]="Accept-Language: en-us,en;q=0.5";
    $header_array[5]="Accept-Encoding: gzip, deflate";
    $header_array[6]="DNT: 1";
    $header_array[7]="Connection: keep-alive";
    $header_array[8]="Content-Type: application/x-www-form-urlencoded";
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
   curl_setopt($ch,CURLOPT_REFERER,"Referer: http://site5.way2sms.com/jsp/InstantSMS.jsp");
    $content = curl_exec( $ch );
    $response = curl_getinfo( $ch );
    curl_close ($ch);
// END OF Code for sending SMS to Recever


}// end function send_sms

send_sms("uname","psswd","target mobile no","message");
 ?> 
</body>
</html>
0

There are 0 answers