Guten Tag,
ich bin langsam mit meinem Java am Ende
Ich versuche für eine Androidapp mich mit den gegebenen Logininformationen anzumelden (userID und userPW). Nach der Anmeldung soll (alles im Hintergrund natürlich) man auf die Webseite mit den Klausurergebnissen weitergeleitet und der Code geladen werden.
An sich funktioniert alles, nur das einloggen/eingeloggt bleiben (weiß nicht, was er nicht schafft) nicht.
Als Vorlage habe ich das hier genommen und quasi 1:1 an meine Bedürfnisse angepasst.
Code ist:
(Natürlich werden noch Variablen geändert/entfernt/einiges Umgebaut, ich will es erstmal am laufen haben)
Die beiden links oben (url & gmail) sind die gleichen, da man bei der immer auf die Startseite kommt, außer man ist angemeldet.
Im Anhang ein Bild des Anmeldeverkehrs (jedoch fehlt bei Cookies ein PHPSessionID-kram).
Beim Debuggen fehlt mir aber der auf dem Bild abgebildete lmdata ... Cookie.
Als Ausgabe bekomme ich übrigens:
Wenn ich nicht korrekte Daten bei UserID und UserPW eingebe, bekomme ich beim ausführen einen 401 Fehler (er muss also im Loginprozess drinne sein).
Über Vorschläge wäre ich dankbar
Grüße,
Negord
ich bin langsam mit meinem Java am Ende
Ich versuche für eine Androidapp mich mit den gegebenen Logininformationen anzumelden (userID und userPW). Nach der Anmeldung soll (alles im Hintergrund natürlich) man auf die Webseite mit den Klausurergebnissen weitergeleitet und der Code geladen werden.
An sich funktioniert alles, nur das einloggen/eingeloggt bleiben (weiß nicht, was er nicht schafft) nicht.
Als Vorlage habe ich das hier genommen und quasi 1:1 an meine Bedürfnisse angepasst.
Code ist:
Java:
/**
* Created by p.m on 06.07.2014.
*/
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HttpUrlConnectionExample {
private List<String> cookies;
private HttpsURLConnection conn;
private final String USER_AGENT = "Mozilla/5.0";
public static void main(String[] args) throws Exception {
String url = "https://cis.nordakademie.de/pruefungsamt/pruefungsergebnisse/?no_cache=1";
String gmail = "https://cis.nordakademie.de/pruefungsamt/pruefungsergebnisse/?no_cache=1";
HttpUrlConnectionExample http = new HttpUrlConnectionExample();
// make sure cookies is turn on
CookieHandler.setDefault(new CookieManager());
// 1. Send a "GET" request, so that you can extract the form's data.
String page = http.GetPageContent(url);
String postParams = http.getFormParams(page, "HIERUSERID", "HIERUSERPW");
//USERID und USERPW werden später durch Variablen ersetzt.
// 2. Construct above post's content and then send a POST request for
// authentication
http.sendPost(url, postParams);
// 3. success then go to gmail.
String result = http.GetPageContent(gmail);
System.out.println(result);
}
private void sendPost(String url, String postParams) throws Exception {
URL obj = new URL(url);
conn = (HttpsURLConnection) obj.openConnection();
// Acts like a browser
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
conn.setRequestProperty("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4");
conn.setRequestProperty("Cache-Control", "max-age=0");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Content-Length", Integer.toString(postParams.length()));
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
for (String cookie : this.cookies) {
conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
}
conn.setRequestProperty("Host", "cis.nordakademie.de");
conn.setRequestProperty("Origin", "https://cis.nordakademie.de");
conn.setRequestProperty("Referer", "https://cis.nordakademie.de/");
conn.setRequestProperty("User-Agent", USER_AGENT);
conn.setDoOutput(true);
conn.setDoInput(true);
// Send post request
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
int responseCode = conn.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + postParams);
System.out.println("Response Code : " + responseCode);
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// System.out.println(response.toString());
}
private String GetPageContent(String url) throws Exception {
URL obj = new URL(url);
conn = (HttpsURLConnection) obj.openConnection();
// default is GET
conn.setRequestMethod("GET");
conn.setUseCaches(false);
// act like a browser
conn.setRequestProperty("User-Agent", USER_AGENT);
conn.setRequestProperty("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language","de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4");
if (cookies != null) {
for (String cookie : this.cookies) {
conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
}
}
int responseCode = conn.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Get the response cookies
setCookies(conn.getHeaderFields().get("Set-Cookie"));
return response.toString();
}
public String getFormParams(String html, String username, String password)
throws UnsupportedEncodingException {
System.out.println("Extracting form's data...");
Document doc = Jsoup.parse(html);
// LoginDIV form id
Element loginform = doc.getElementById("c217");
//NEU
Elements inputElements = loginform.getElementsByTag("input");
//
List<String> paramList = new ArrayList<String>();
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("pass");
if (key.equals("user"))
value = username;
else if (key.equals("pass"))
value = password;
//Testweise
else if(key.equals("submit"))
value = "Anmelden";
else if(key.equals("logintype"))
value = "login";
else if(key.equals("pid"))
value = "2";
else if(key.equals("redirect_url"))
value = "";
paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8"));
}
// build parameters list
StringBuilder result = new StringBuilder();
for (String param : paramList) {
if (result.length() == 0) {
result.append(param);
} else {
result.append("&" + param);
}
}
return result.toString();
}
public List<String> getCookies() {
return cookies;
}
public void setCookies(List<String> cookies) {
this.cookies = cookies;
}
}
Die beiden links oben (url & gmail) sind die gleichen, da man bei der immer auf die Startseite kommt, außer man ist angemeldet.
Im Anhang ein Bild des Anmeldeverkehrs (jedoch fehlt bei Cookies ein PHPSessionID-kram).
Beim Debuggen fehlt mir aber der auf dem Bild abgebildete lmdata ... Cookie.
Als Ausgabe bekomme ich übrigens:
Sending 'GET' request to URL : https://cis.nordakademie.de/pruefungsamt/pruefungsergebnisse/?no_cache=1
Response Code : 200
Extracting form's data...
Sending 'POST' request to URL : https://cis.nordakademie.de/pruefungsamt/pruefungsergebnisse/?no_cache=1
Post parameters : user=USERID&pass=USERPW&submit=Anmelden&logintype=login&pid=2&redirect_url=
Response Code : 200
Sending 'GET' request to URL : https://cis.nordakademie.de/pruefungsamt/pruefungsergebnisse/?no_cache=1
Response Code : 200
<!DOCTYPE html ...und Restcode von der STARTSEITE ...>
Wenn ich nicht korrekte Daten bei UserID und UserPW eingebe, bekomme ich beim ausführen einen 401 Fehler (er muss also im Loginprozess drinne sein).
Über Vorschläge wäre ich dankbar
Grüße,
Negord