I want to login to a website from my Java desktop application. I have to write Username
& Password
using OutputStreamWriter
. I am able to login to other website successfully from my application but not the one which I really want to. After analyzing the page source of that website I found that the ID
of those two text boxes for Username & password
changes with every request and every time the page refresh.
<input type="text" name="UserName_88515" id="UserName_88515" />
In the id
the last 5 digits changes every time, so I decided to read the page source, retrieve those five digits and then write credentials to log in to that website.
public class LoginHandler {
static boolean isLoggedIn = false;
static String responseText, myText;
public void login(String usrname, String password, String cookys, String sessionCode) {
try {
URL url = new URL("http://www.somewebsite.com/home.php?session="
+ sessionCode);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0");
conn.setRequestProperty("Cookie", cookys);
conn.setDoOutput(true);
final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
final StringBuilder response = new StringBuilder();
myText = response.toString();
String line;
while ((line = rd.readLine()) != null) {
response.append(line);
}
rd.close();
final String text1 = response.toString();
final int starIndex = text1.indexOf("UserName_");
final int endIndex = starIndex + 15;
System.err.println("This is starIndex" + starIndex);
System.err.println("This is endIndex" + endIndex);
final String avc = text1.substring(starIndex, endIndex);
System.err.println("This is avc\n" + avc);
final String fin = avc.substring(10, 15);
System.err.println("This is fin\n" + fin);
final String data1 = URLEncoder.encode("MessageLength", "UTF-8")
+ "=" + URLEncoder.encode("140", "UTF-8") + "&"
+ URLEncoder.encode("UserName_" + fin, "UTF-8") + "="
+ URLEncoder.encode("username", "UTF-8") + "&"
+ URLEncoder.encode("Password_" + fin, "UTF-8") + "="
+ URLEncoder.encode("password", "UTF-8") + "&"
+ URLEncoder.encode("LoginNowbtnDiv", "UTF-8") + "="
+ URLEncoder.encode("Login Now", "UTF-8") + "&"
+ URLEncoder.encode("LoginNow", "UTF-8") + "="
+ URLEncoder.encode("Login Now", "UTF-8");
System.err.println("THIS IS Data1:\n " + data1);
final OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data1);
wr.flush();
final BufferedReader rd1 = new BufferedReader(new InputStreamReader(conn.getInputStream()));
final StringBuilder response1 = new StringBuilder();
String line1;
while ((line1 = rd1.readLine()) != null) {
response1.append(line1);
}
final String text2 = response1.toString();
System.err.println("This is second response\n" + text2);
rd1.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
For that I have written the following code, but I was getting following error:
Cannot write output after reading input