import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;


public class ValidateCaptcha {
	private String serverid="";
	private String sessionid="";
	private String gaid="";
	private String[] as = null;
	
	public String[] connectNTES() throws Exception{
//		Jsoup.connect("http://enquiry.indianrail.gov.in/ntes/")
//		 .header("Host", "enquiry.indianrail.gov.in")
//		 .header("Content-Type", "application/x-www-form-urlencoded")
//		 .header("Referer", "http://enquiry.indianrail.gov.in/ntes/")
//		 .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36")
//		 .header("Connection", "keep-alive")
//		 .header("Cookie","")
//		 .timeout(60000)
//		 .get();
		System.setProperty("http.keepAlive", "false");
		String link="http://enquiry.indianrail.gov.in/ntes/";
		URL url = new URL(link);		 
		HttpURLConnection httpurlconnection1 = (HttpURLConnection) url.openConnection();
		
		httpurlconnection1.setConnectTimeout(600000);
	    httpurlconnection1.setDoInput(true);
	    httpurlconnection1.setDoOutput(false);
	    httpurlconnection1.setUseCaches(false);
	    httpurlconnection1.setRequestProperty("Host", "enquiry.indianrail.gov.in");
	    httpurlconnection1.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
	    httpurlconnection1.setRequestProperty("Referer", "http://enquiry.indianrail.gov.in/ntes/");
	    httpurlconnection1.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36");
	    httpurlconnection1.setRequestProperty("Cookie", "");
	    httpurlconnection1.setRequestMethod("GET");
	    
	    Map<String, List<String>> map1 = httpurlconnection1.getHeaderFields();
	    //httpurlconnection1.connect();
		
		for(Map.Entry<String, List<String>> entry: map1.entrySet()){
			String key = entry.getKey();
			List<String> values = entry.getValue();
			//System.out.println("key="+key);
			for (int i = 0; i < values.size(); i++) {
				String val=values.get(i);
				//System.out.println("value "+i+": "+val);
				if(key!=null&&key.toLowerCase().contains("set-cookie")){
					if(val.contains("JSESSIONID")){
						sessionid=val;
					}
					if(val.contains("SERVERID")){
						serverid = val;
					}
					
				}
			}			
		}
		int i=0;
		 String s1 = getData(((InputStream) (new BufferedInputStream(httpurlconnection1.getInputStream()))));
		 String s2 = validation(s1);
		 //System.out.println("\n\n"+s1);
		 as = new String[2];
		 if (s1.contains("validateCaptcha()"))
	        {
			 //System.out.println("\n\n"+s1);
			 return null;
	           // throw new Exception();
	        }
	        i = 6 + s1.indexOf("name='");
	        as[0] = s1.substring(i, i + 10).trim();
	        as[1] = s1.substring(i + 19, i + 29).trim();
	        //System.out.println("as[0]="+as[0]+", "+"as[1]="+as[1]);
	        return as;
		
	}
	
	 public static Calendar getCalendar()
	    {
	        return Calendar.getInstance(TimeZone.getTimeZone("Asia/Kolkata"));
	    }	
	 
public String getContent() throws IOException{		
		
		String time=(new StringBuilder()).append(getCalendar().getTimeInMillis()).append("").toString();	
		
		String myCookie = setCookie();
		
		//System.out.println("myCookie="+myCookie);
		String captchaURL = "http://enquiry.indianrail.gov.in/ntes/CaptchaServlet?action=getNewCaptchaImg&t="+URLEncoder.encode(time,"UTF-8")+"&"+as[0]+"="+as[1];
		//System.out.println(captchaURL);
		URL url = new URL(captchaURL);		 
		HttpURLConnection httpurlconnection1 = (HttpURLConnection) url.openConnection();
		
		httpurlconnection1.setConnectTimeout(600000);
	    httpurlconnection1.setDoInput(true);
	    httpurlconnection1.setDoOutput(false);
	    httpurlconnection1.setUseCaches(false);
	    httpurlconnection1.setRequestProperty("Host", "enquiry.indianrail.gov.in");
	    httpurlconnection1.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
	    httpurlconnection1.setRequestProperty("Referer", "http://enquiry.indianrail.gov.in/ntes/");
	    httpurlconnection1.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36");
	    httpurlconnection1.setRequestProperty("Cookie", myCookie);
	    httpurlconnection1.setRequestMethod("GET");
	    //httpurlconnection1.connect();
	    
	    String b= getData(new BufferedInputStream(httpurlconnection1.getInputStream()));
	    String s4 = b.replaceAll("trnName:.*?,", "");
	    //System.out.println("s4="+s4);
        if (httpurlconnection1 != null)
        {
            try
            {
                httpurlconnection1.disconnect();
            }
            catch (Exception exception3)
            {
                return s4;
            }
        }
        return s4;
	   //return b;
		//Bitmap bit = BitmapFactory.decodeStream(new FlushedInputStream((InputStream) connection.getContent()));		

	}

public byte[] downloadImage() throws IOException{		
	
	String time=(new StringBuilder()).append(getCalendar().getTimeInMillis()).append("").toString();	
	
	String myCookie = setCookie();		
	
	time = "http://enquiry.indianrail.gov.in/ntes/CaptchaServlet?action=getNewCaptchaImg&t="+URLEncoder.encode(time,"UTF-8");
	URL url = new URL(time);		 
	HttpURLConnection httpurlconnection1 = (HttpURLConnection) url.openConnection();
	
	httpurlconnection1.setConnectTimeout(600000);
    httpurlconnection1.setDoInput(true);
    httpurlconnection1.setDoOutput(false);
    httpurlconnection1.setUseCaches(false);
    httpurlconnection1.setRequestProperty("Host", "enquiry.indianrail.gov.in");
    //httpurlconnection1.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    httpurlconnection1.setRequestProperty("Referer", "http://enquiry.indianrail.gov.in/ntes/");
    httpurlconnection1.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36");
    httpurlconnection1.setRequestProperty("Cookie", myCookie);
    httpurlconnection1.setRequestMethod("GET");
    
    //httpurlconnection1.connect();
    
    byte[] b= byteImage(new BufferedInputStream(httpurlconnection1.getInputStream()));
   return b;
	//Bitmap bit = BitmapFactory.decodeStream(new FlushedInputStream((InputStream) connection.getContent()));		

}

	
	 private String getData(InputStream inputstream) throws IOException
	    {
	        byte abyte0[] = new byte[1024];
	        ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(1024);
	        do
	        {
	            int i = inputstream.read(abyte0);
	            if (i != -1)
	            {
	                bytearrayoutputstream.write(abyte0, 0, i);
	            } else
	            {
	                inputstream.close();
	                return bytearrayoutputstream.toString();
	            }
	        } while (true);
	    }
	 
	 private byte[] byteImage(InputStream inputstream) throws IOException
	    {
	        byte abyte0[] = new byte[1024];
	        ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(1024);
	        do
	        {
	            int i = inputstream.read(abyte0);
	            if (i != -1)
	            {
	                bytearrayoutputstream.write(abyte0, 0, i);
	            } else
	            {
	                inputstream.close();
	                return bytearrayoutputstream.toByteArray();
	            }
	        } while (true);
	    }
	 private String validation(String s)
	    {
	        String s4;
	        try
	        {
	            //replace(char oldChar, char newChar)
	            String s1 = s.replace("\"", "").replace(" ", "").replace("+", "").replace("\r", "").replace("\n", "").replace("\t", "");
	            //int indexOf(String str): Returns the index within this string of the first occurrence of the specified
	            // substring. If it does not occur as a substring, -1 is returned.
	            int i = s1.indexOf("validateCaptchaText");
	            //public String substring(int beginIndex, int endIndex)
	            String s2 = s1.substring(i, i + 100);
	            String s3 = s2.substring(1 + s2.indexOf("&"));
	            s4 = s3.substring(0, s3.indexOf("&"));
	        }
	        catch (Exception exception)
	        {
	            return null;
	        }
	        return s4;
	    }
	 
	 private String setCookie()
	    {
	        //e e1 = new e(context);
	        String s = serverid;//e1.g();//serverid
	        String s1 = sessionid;//e1.e();//sessionid
	        String s2 = gaid;//e1.i();//gaid
	        if (s1 == null)
	        {
	            s1 = "";
	        } else
	        {
	            if (s != null && !s.equals(""))
	            {
	                s1 = (new StringBuilder()).append(s1).append(";").append(s).toString();
	            }
	            if (s2 != null && !s2.equals(""))
	            {
	                return (new StringBuilder()).append(s1).append(";").append(s2).toString();
	            }
	        }
	        return s1;
	    }
	 
	 public static  void main(String[] args) throws Exception{
		 
		ValidateCaptcha vc = new ValidateCaptcha();
		vc.connectNTES();
		vc.getContent();
		byte[] b =vc.downloadImage();
		if(b.length > 0)
			System.out.println("Image found");
		else 
			System.out.println("Image not found");
		
	 }
}