1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

html post ausführen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von MetBo, 26.09.2010.

  1. MetBo, 26.09.2010 #1
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Hallo

    ich versuche gerade aus meiner App ein Post von einer Website auszuführen ...

    Webseite: Free SMS ohne Anmeldung kostenlos versenden

    Mein Javacode:
    Code:
    private boolean postData(String empfaenger, String nachricht, String sicherheitscode) {
            HttpClient httpClient = new DefaultHttpClient();  
            HttpPost httpPost = new HttpPost("http://www.mufa.de/free-sms.html");  
          
            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("sms_size", "160"));
                nameValuePairs.add(new BasicNameValuePair("sms_recipients", empfaenger));
                nameValuePairs.add(new BasicNameValuePair("sms_text", nachricht));  
                nameValuePairs.add(new BasicNameValuePair("recaptcha_response_field", sicherheitscode));
    //            nameValuePairs.add(new BasicNameValuePair("recaptcha_challenge_field", "03AHJ_VuvjP9QILTCN7rsoulyd2LXSY24jCPgjmGlel8JY_3baYNL8jbyzPJqUxEGAyGpDDfo3erOmjQRjY7pISTbOCnhKt3QXYtI9sKjBnUPJeO5L-ZuBx9YJf4tVXktEYfY34LfgjVWnv2IGIR6QPxAk0JdqLtjHmQ"));
                UrlEncodedFormEntity ent = new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8);
                httpPost.setEntity(ent);
                HttpResponse responsePOST = httpClient.execute(httpPost);  
                HttpEntity resEntity = responsePOST.getEntity();  
                
    //            BufferedReader in = new BufferedReader(new InputStreamReader(responsePOST.getEntity().getContent()));
    //            StringBuffer sb = new StringBuffer("");
    //            String line = "";
    //            String NL = System.getProperty("line.separator");
    //            while ((line = in.readLine()) != null) {
    //                sb.append(line + NL);
    //            }
    //            in.close();
    //            String result = sb.toString();
    //            System.out.println(result);
    //            
                return true;
            } catch (ClientProtocolException e) {  
                return false;
            } catch (IOException e) {  
                return false;  
            }  
        }
    Leider funktioniert das nicht ... :( Das Captcha kann ich erfolgreich in meiner App anzeigen lassen ... Nur das senden (post) funktioniert nicht.

    Könnte mal jemand darüber gucken und sich auch mal den Quelltext der Seite anschauen?

    Wäre echt cool, ich verzweifel hier voll ...

    Vielen Dank
     
  2. Unicate, 27.09.2010 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Ist der request auch Richtig?
    Sendest du alle vom Server erwarteten Parameter?

    Um das zu prüfen sei hier mal wireshark genannt.
    Dann baust du dir nen "Spielserver". Ein Server der alles annimmt und irgendetwas zurück gibt (200 OK wäre in deinem fall das richtige)

    So kannst du überprüfen ob du auch das sendest was du musst.

    Ich hab mal so einen Testserver geschrieben und mit angehängt.
     

    Anhänge:

  3. MetBo, 27.09.2010 #3
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Vielen dank,

    ich werde es mal ausprobieren, aber würde es nicht reichen, wenn ich im Javacode einfach die StatusLine des Request auf 200 abfrage? Das dürfte doch eigentlich genügen, oder?

    Oder kann es vielleicht an dem Captcha liegen? Die Seite bezieht das Captcha von Google. Kann ich das Captcha einfach immer wieder neu laden, oder wird das z.B. in den Sessions gespeichert und somit geschützt?

    Mich wundert es ja, dass er keine Exception schmeißt, wenn es nicht klappt.

    EDIT: Oder muss ich vielleicht den Content-Type beim Post mitübergeben?
     
    Zuletzt bearbeitet: 27.09.2010
  4. FelixL, 27.09.2010 #4
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Ich dachte es liegt vielleicht an den Cookies, hab die gerade mal probeweise gelöscht bevor ich auf senden gegangen bin... hat trotzdem funktioniert. Viel Glück noch ;)
     
  5. MetBo, 27.09.2010 #5
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Ja danke, wäre echt schon komisch gewesen, wenn es an den Cookies liegt ...

    Oder kann ich vielleicht nicht auf die Website so draufzugreifen? Können solche Webseiten, solche Apps blocken?

    So ein einfaches Programm und ich verzeifeln bei der sch**ß Post übergabe -.-
     
  6. Unicate, 27.09.2010 #6
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Versuch doch mal folgendes:


    • Wirf den Wireshark an um die Pakete zu capturen (Filter: http).
    • Dann geh auf die Webseite und sende mal eine SMS
    • Schau die im Wireshark an was dort rauskommt (POST)
    • Dann versuch das nachzubauen indem du die Headerparameter weitestgehend übernimmst
    Dann sollte das ganze funktionieren.
    Du kannst zu testzwecken ja einfach alles übernehmen (User-Agent etc.) damit du evtl. User-Agent begrenzungen umgehst.

    Dann wirfst du den Testserver an und schaust ob die Header die gleichen sind. (ausgenommen evtl SessionId's etc.)
     
    FelixL bedankt sich.
  7. MetBo, 27.09.2010 #7
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Ok danke, werde ich später mal ausprobieren
     
  8. FelixL, 27.09.2010 #8
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    @Unicate: Hört sich sehr gut an das Programm, ist sicher mal nützlich.
     
  9. MetBo, 27.09.2010 #9
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Ja wireshark ist ganz nett, nutzen wir in der Schule zum Untersuchen der Netzwerkkarte auch. Schon interessant, was für Daten über die karte laufen
     
  10. BenOtto, 27.09.2010 #10
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Captchas sind ne eklige sache... die werden meist asynchron (ajax o.Ä.) nachgeladen, um zu unterbinden, dass die Eingabe automatisch geschieht.
    Hab zwar deinen Post nicht gelesen, wollte aber mal meinen Senf dazugeben =)
     
  11. MetBo, 27.09.2010 #11
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Also ich habe jetzt alle Parameter und Headerinfos nachgebaut, bringt mich trotzdem leider nicht weiter :(, oder ich blicke da einfach nicht durch ...

    Die SMS wird einfach nicht versendet. Anscheinend liegt es am Captcha.

    Mag sich nicht mal wer den html Quelltext der Seite anschauen und einen Vorschlag machen? Ich finde dort leider nichts passendes

    Folgendes steht bei Wireshark:
     
  12. Unicate, 28.09.2010 #12
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Poste mal bitte den kompletten header aus dem Wireshark und den Header den du in der app sendest (benutze dazu den TestServer)

    Hast du evtl. das "[truncated]" mit in deinen Header übernommen? Das ist nur vom Wireshark ;)
     
    Zuletzt bearbeitet: 28.09.2010
  13. MetBo, 28.09.2010 #13
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Ich werde später den Code posten. Nein habe ich nicht, soo doof bin ich nun auch nicht ;-)

    Ich glaube wohl eher es liegt an dem Captcha. Gibt es da nicht eine Möglichkeit das Captcha zu umgehen?
     
  14. Unicate, 28.09.2010 #14
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Du könntest die mal den Code für den Captcha-Recognizer im JDownloader ansehen. Der Code ist offen.

    Direkt umgehen geht aber nicht. Dafür sind die Dinger ja da.

    Ich kann mir aber gerade auch nicht vorstellen, was mit dem Captcha nicht gehen soll.
    Das Bild bekommst du auf's Telefon? Wenn du das Bild auf's Telefon bekommst und der User den Code eingibt, sollte es da gar keine Schwierigkeiten geben.

    Nimmst du eigentlich das "recaptcha_challenge_field" mit?
    Ich glaube das solltest du.

    Ich nehm mal an das geht so:

    Wenn eine anfrage bei deren Server reinkommt wir ein Captcha-Field erzeugt und dieses mit einer eindeutigen ID (dem captcha_challange_field)
    Wenn die richtige Antwort mit der dazugehörigen ID zurückkommt, wird die SMS versandt, ansonsten halt nicht
     
    Zuletzt bearbeitet: 28.09.2010
  15. MetBo, 28.09.2010 #15
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Ich schicke dir später mal meinen gesamten Code, macht wohl mehr Sinn, als wenn ich dir hier alles nur bruchweise zeige.
     

Diese Seite empfehlen