如何在成功登录后填写表格

时间:2012-04-11 10:03:07

标签: java php curl apache-httpcomponents way2sms

我正在尝试使用HttpComponents通过way2sms发送短信。到目前为止,对网站的登录尝试是成功的,因为网站的登录历史清楚地显示了它,并且我能够从cookie成功获得JSESSIONID。但是代码以某种方式无法发送短信本身。相反,对最终POST请求的响应是HTML页面,显示msg和接收者号码的空白文本字段。请让我知道我哪里错了? 这是我的代码,其中包含用户名和密码,原因显而易见:

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");

    }

}

我使用以下PHP代码作为参考。这段代码完美无缺:

<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 个答案:

没有答案