html post ausführen

MetBo

MetBo

Erfahrenes Mitglied
4
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
 
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

  • TestServer.zip
    189,6 KB · Aufrufe: 85
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:
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 ;)
 
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 -.-
 
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.)
 
  • Danke
Reaktionen: FelixL
Ok danke, werde ich später mal ausprobieren
 
@Unicate: Hört sich sehr gut an das Programm, ist sicher mal nützlich.
 
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
 
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 =)
 
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:
[truncated] sms_size=160&
sms_recipient=01732342341012012
&sms_text=teest
&recaptcha_challenge_field=03AHJ_VutPpqoU_8z8b1fZA16Vu4wOOKa0iV7lNFaKSLi_cqjOqPSOvOaCxUICn5EVeqhg-FPk6xtAeInP1aN1O4X2QGecLayzF4uc-W4XDAtl2h1j4oBUH7LIC1wL-zG-U3ByZvG439c_WQpg
 
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:
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?
 
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:
Ich schicke dir später mal meinen gesamten Code, macht wohl mehr Sinn, als wenn ich dir hier alles nur bruchweise zeige.
 

Ähnliche Themen

C
Antworten
8
Aufrufe
1.127
swa00
swa00
H
Antworten
0
Aufrufe
933
HoustonWeHaveAProblem
H
A
  • Arif12
Antworten
2
Aufrufe
1.821
Arif12
A
Zurück
Oben Unten