ASP.NET framework Daten abrufen ueber HTTPS

L

Lucius1972

Neues Mitglied
0
Hallo Leute,

Ich probiere eine App zu entwickeln die auf eine SSL Webseite (MijnZiggo Mobiel) einzuloggen soll um da einige Daten abzurufen. Ich habe mich schon eine Info wie Header und Cookies, etc ueber Fiddler angeschaut aber bekomme immer die Seite zum einloggen als Ergebniss zurueck, mein Ziel ist es die Daten von Punkt 3 (untengenannt) aubzurufen.
Es wuerde nett sein wenn mir da Jemand weiter helfen koennte. Laut Fiddler sollen die posts und gets wie folgt ausschauen:

1. Post auf MijnZiggo Mobiel -- Status Code: 302 found
2. Get auf MijnZiggo Mobiel -- Status Code: 302 found (redirect nach /PersonalData)
3. Get auf MijnZiggo Mobiel -- Status Code: 200 found

Ich habe folgenden Code aber der gibt mir immer die Startseite (MijnZiggo Mobiel) als Ergebniss zurueck.

Code:
public String postRequest() {

    String responseString = "";
    String ZIGGOPOST = https://mobiel.ziggo.nl/Account/LogOn']MijnZiggo Mobiel";
    String ZIGGOGET = "https://mobiel.ziggo.nl/PersonalData']MijnZiggo Mobiel";


    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);

        MySSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

        DefaultHttpClient http = new DefaultHttpClient(ccm, params);

        // 1st GET //
        HttpGet httpPost = new HttpGet(ZIGGOPOST);
        httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36");
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");

        HttpResponse response = http.execute(httpPost);

        Log.d(TAG, "response stat code " + response.getStatusLine().getStatusCode());

        if (response.getStatusLine().getStatusCode() < 400) {

            // Get Session cookie //
            String cookie = response.getFirstHeader("Set-Cookie")
                    .getValue();
            Log.d(TAG, "cookie: " + cookie);

            // 1st POST //
            HttpPost getData = new HttpPost(ZIGGOGET);

            // Set Session cookie //
            getData.addHeader("Cookie", cookie);
            getData.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36");
            getData.addHeader("Content-Type", "application/x-www-form-urlencoded");

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("Username", "user));
            nameValuePairs.add(new BasicNameValuePair("Password", "pass"));
            getData.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            response = http.execute(getData);

            List<Cookie> cookies = http.getCookieStore().getCookies();
            if (cookies.isEmpty()) {
                System.out.println("None");
            } else {
                for (int i = 0; i < cookies.size(); i++) {
                    Log.d("POSTHEADERS: ", cookies.get(i).toString());
                }

                responseString = EntityUtils.toString(response.getEntity());

                String resuLt= response.getStatusLine().toString();
                System.out.println("RESPONSE: " + resuLt);
            }

            http.getConnectionManager().shutdown();
            System.out.println("Connection: closed!");
        }
     ....
....
    }
    return responseString;
}}

Logcat:
12-17 21:58:20.378 14143-14306/com.tutorialsface.ziggoverbruik D/*: response stat code 200
12-17 21:58:20.378 14143-14306/com.tutorialsface.ziggoverbruik D/*: cookie: ASP.NET_SessionId=fxssf0gnfjkfdz445hehorce; path=/; HttpOnly
12-17 21:58:21.115 14143-14306/com.tutorialsface.ziggoverbruik D/POSTHEADERS:: [version: 0][name: ASP.NET_SessionId][value: fxssf0gnfjkfdz445hehorce][domain: mobiel.ziggo.nl][path: /][expiry: null]
12-17 21:58:21.115 14143-14306/com.tutorialsface.ziggoverbruik D/POSTHEADERS:: [version: 0][name: _culture_sc][value: nl][domain: mobiel.ziggo.nl][path: /][expiry: Sat Dec 17 21:58:19 GMT+01:00 2016]
12-17 21:58:21.116 14143-14306/com.tutorialsface.ziggoverbruik D/POSTHEADERS:: [version: 0][name: __RequestVerificationToken][value: pJy0WHfHY2lK-_ZJXl3aoIvisVDarUf8FckqBPaomtL0Nq8h4MPxBrmhwOkqt95DEY5UYilygjoRkJ1622ecgqTGJan8UDYJKA1dn2uZats1][domain: mobiel.ziggo.nl][path: /][expiry: null]
12-17 21:58:21.116 14143-14306/com.tutorialsface.ziggoverbruik D/POSTHEADERS:: [version: 0][name: AWSELB][value: 8531CF6912558C4E64C6A46FDD46D2677B2558E852AF477078D277B31FA9F5728B0387EEC89912A67B0A1ACDCB474BBF0863366F22F2E637C7C9DF353DCC76C43A6CC30545][domain: mobiel.ziggo.nl][path: /][expiry: Thu Dec 17 22:28:20 GMT+01:00 2015]
12-17 21:58:21.121 14143-14306/com.tutorialsface.ziggoverbruik I/System.out: RESPONSE: HTTP/1.1 200 OK
12-17 21:58:21.127 14143-14306/com.tutorialsface.ziggoverbruik I/System.out: Connection: closed!

Schonmal vielen Dank fuer eure Hilfe.
 
Zuletzt bearbeitet:
Hallo,

dein Code macht genau das, was du programmierst hat. Du rufst den Link einer Webseite auf, und der Sever liefert dir genau die Website zurück.
Du hast jetzt zwei Möglichkeiten, du liest die Webseite ein, und wertest das HTML aus, und übergibst die richtigen Daten. Was nicht ganz trivial ist.

Die zweite Möglichkeit wäre, du fragst die Entwickler der Seite, ob es eine Internetschnittstelle gibt, welche du benutzen darfst.

Noch eine Anmerkung zu Deine Code. Die Klassen, (DefaultHttpClient usw.) die du für den Aufbau der Netzwerkverbindung benutzt, sind seit Android 6.0 nicht mehr Teil des Frameworks. Du solltest statt dessen eher UrlConnection verwenden, schon um die Sicherheit der Verbindung zu gewährleisten.

Android 6.0 Changes | Android Developers

HttpURLConnection | Android Developers
Connecting to the Network | Android Developers
 
markus.tullius schrieb:
Hallo,

dein Code macht genau das, was du programmierst hat. Du rufst den Link einer Webseite auf, und der Sever liefert dir genau die Website zurück.
Du hast jetzt zwei Möglichkeiten, du liest die Webseite ein, und wertest das HTML aus, und übergibst die richtigen Daten. Was nicht ganz trivial ist.

Die zweite Möglichkeit wäre, du fragst die Entwickler der Seite, ob es eine Internetschnittstelle gibt, welche du benutzen darfst.

Noch eine Anmerkung zu Deine Code. Die Klassen, (DefaultHttpClient usw.) die du für den Aufbau der Netzwerkverbindung benutzt, sind seit Android 6.0 nicht mehr Teil des Frameworks. Du solltest statt dessen eher UrlConnection verwenden, schon um die Sicherheit der Verbindung zu gewährleisten.

Android 6.0 Changes | Android Developers

HttpURLConnection | Android Developers
Connecting to the Network | Android Developers

Hallo Markus,
erstmal vielen Dank für deine Antwort, Ich habe tatsächlich gelesen dass nur noch "httpurlconnection" gängig ist ab Android 6, Ich habe aber leider keine einzige Erfahrung damit und da es sich hier um eine SSL Seite handelt wird das ganze noch schwieriger.
Ich habe schon gegoogeled nach etwas Beispielen damit Ich mir ein Bild machen kann aber es sind soviele dass Ich nicht mehr durchblicke.
 
Ein ganz einfaches Beispiel:

Android Networking - Tutorial

Wenn Du eine SSL Verbindung benutzen möchtest ersetzt du einfach HttpUrlConnection durch HttpsUrlConnection.
 
  • Danke
Reaktionen: Lucius1972
markus.tullius schrieb:
Ein ganz einfaches Beispiel:

Android Networking - Tutorial

Wenn Du eine SSL Verbindung benutzen möchtest ersetzt du einfach HttpUrlConnection durch HttpsUrlConnection.

Hallo Markus,
sehr nuetzlich Danke dir, hasst du vielleicht noch einen Tip wie Ich am besten erkennen kann ueber Fiddler wie Ich einen Post machen soll? Ich meine ob es JSon, XML, UTF-8. JQuery oder wie auch immer ist? Was soll mann beachten?
Ich habe muehe dies zu erkennen.
Danke nochmal fuer deine Hilfe.
 
Json und XML ist recht einfach.
Ein Json fängt nomalerweise mit '{'oder '[' an.
Ein XML immer mit '<'.

Aber im Endeffekt sollte man schon vorher wissen, was der Server ungefähr zurück liefern wird. Am besten man kennt die genaue Spezifikationen der Schnittstelle. Sonst wird es einfach nur aufwendig.
 
markus.tullius schrieb:
Json und XML ist recht einfach.
Ein Json fängt nomalerweise mit '{'oder '[' an.
Ein XML immer mit '<'.

Aber im Endeffekt sollte man schon vorher wissen, was der Server ungefähr zurück liefern wird. Am besten man kennt die genaue Spezifikationen der Schnittstelle. Sonst wird es einfach nur aufwendig.
Ok Danke dir, Ich habe keine Kontrolle ueber den Server selber also wird es etwas schwierig aber mit viel geduld muss das klappen.
 
Hallo Markus,
Ich brauche mal bitte deine Hilfe, bei einem Post auf der LoginSeite muessen folgende Werte mitgegeben werden:

Code:
__RequestVerificationToken:aXh0j6TsGMzHLPwYvkSX-BJmkH4h3Gk2joAK0oNl9mDWJp4xP5jjl3KOCJPfaHWtgpAgcXQGJ6rrVM0IoYQvsuPYMYongNgzVpqlkj_qrAA1
ReturnUrl:
Username:user
Password:pass

Nicht geparst sieht das so aus:
Code:
__RequestVerificationToken=aXh0j6TsGMzHLPwYvkSX-BJmkH4h3Gk2joAK0oNl9mDWJp4xP5jjl3KOCJPfaHWtgpAgcXQGJ6rrVM0IoYQvsuPYMYongNgzVpqlkj_qrAA1&ReturnUrl=&Username=user&Password=pass

Ich nehme an Ich muss erst den Wert von "__RequestVerificationToken" kriegen und dann nochmal einen Post auf den Loginlink --https://mobiel.ziggo.nl/Account/LogOn-- machen oder einen Post auf --https://mobiel.ziggo.nl/PersonalData--, da sind namelich die Daten die Ich brauche.
Wenn Ja wie bekomme Ich am besten den "__RequestVerificationToken" Wert? Wenn der Post gelungen ist und Ich bin authenticated hohle Ich mir das Session-Cookie damit die Session behalten bleibt fuer weiter Anfragen, so hatte Ich es jedenfalls gedacht.

Bekomme jetzt naemlich einen timeout: "W/System.err: java.net.SocketTimeoutException: timeout"
Wenn du mir weiterhelfen kannst und es klappt, wuerde Ich dir ewig dankbar sein!

Mein Postcode sieht wie folgt aus:

Code:
public String doPost(String url) throws Exception {
        URL urlObj = new URL(url);
        trustAllHosts();
        HttpsURLConnection conn = (HttpsURLConnection) urlObj.openConnection();
        conn.setReadTimeout(40 * 1000);
        conn.setConnectTimeout(45 * 1000);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36");
        conn.setDoOutput(true);

        Uri.Builder builder = new Uri.Builder()
                .appendQueryParameter("__RequestVerificationToken", "blablabla")
                .appendQueryParameter("ReturnUrl", "")
                .appendQueryParameter("Username", "user")
                .appendQueryParameter("Password", "pass");
        String query = builder.build().getEncodedQuery();

        OutputStream os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));

        writer.write(query);
        writer.flush();
        writer.close();
        os.close();

        String line;
        StringBuffer buffer = new StringBuffer();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
            System.out.println("Post: " + line);
        }
        reader.close();
        int status = conn.getResponseCode();
        String testString = Integer.toString(status);
        Log.e("Status: ", testString);

        conn.disconnect();
        return status + "";
    }
 

Ähnliche Themen

S
Antworten
17
Aufrufe
549
jogimuc
J
B
Antworten
4
Aufrufe
467
bb321
B
M
Antworten
4
Aufrufe
1.166
swa00
swa00
Zurück
Oben Unten