Noch ein Problem, Traffic not permittet

  • Nabend,


    zur Vorgeschichte einfach meinen anderen Thread anschauen :)


    Ich hab jetzt folgendes Tutorial probiert: https://draeger-it.blog/androi…ank-verbinden-16-01-2016/


    Leider hab ich folgendes Problem:


    Code
    07-15 22:22:26.785 14782-14802/com.mysqltest.osek.mysqltest W/System.err: java.io.IOException: Cleartext HTTP traffic to ***.*.***.*** not permitted

    Wenn ich allerdings über den Browser zugreif wird die richtige Ausgabe angezeigt. Muss ich noch irgendwelche Configs ändern?



    Hoffe jemand kann helfen :)

  • Hatte die letzten Tage wenig Zeit, also dry für die späte Antwort. Ich habs jetzt so gemacht, dass ich einfach in meinen Server ein eigenes Zertifikat eingebaut hab (sagt man das so? Ich kenn mich in dem Bereich wie gesagt echt noch nicht aus...) Also kann man jetzt auch per https darauf zugreifen.


    Der vorherige Fehler ist verschwunden, da ich allerdings kein offizielles Zertifikat nutze kommt wenn man sie jetzt aufruft immer diese Meldung "unsichere Verbindung" oder so, mich stört das nicht, Android allerdings schon


    Kann man Android da irgendwie austricksen oder so, oder muss ich mir jetzt auch noch n ssl Zertifikat kaufen? D:

  • Ich mach meine Aufrufe mit Http(s)URLConnection...
    Also mit HttpURLConnection kannst du Seiten auslesen ohne SSL Zertifikat.


    https://medium.com/@lewisjkl/a…ask-tutorial-7ce5bf0245cd
    Ich glaube ich habe das nach diesem Tutorial gemacht.


    Vielleicht hilft dir das weiter :)

    Hmmm ne, also im Prinzip ist das das gleiche was ich jetzt mach, hier mal mein Code:


    Bzw. ich habs jetzt auch mal mit dem HttpUrlRequest probiert, zwar nicht mit deinem Tutorial, das hat leider nicht geklappt. Aber da bekomm ich, wenn ich http benutze den "CleartextTraffic not allowed" Fehler, und wenn ich https benutze das Ding mit "Trust anchor for certification path not found." :(


    Muss ich vielleicht am Server was ändern? Ich habe dieses Tutorial benutzt: https://legacy.thomas-leister.…erbindungen-ermoeglichen/

  • Hallo eine Frage zu dem Thema
    Ist das dein eigener Server auf dem die MySql DB läuft ?


    Mal noch eine Frage wo baust du deine HttpURLConnection auf?
    Du hast nur eine normal UrlConnection und keine Http oder Https.


    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();


    urlConnection.setRequestMethod("POST");
    finde ich auch nicht in deinem Code.




    habe auch mal versucht auf die Adresse vom Browser aus zuzugreifen.


    Mit https kommt eine Fehlermeldung wegen fehlenden Zertifikates.


    Nur http bekomme ich einen Json Sting zurück.


    [{"id":"1","name":"bob","age":"18"},{"id":"2","name":"kevin","age":"19"},{"id":"3","name":"Mr. Osek","age":"18"},{"id":"1","name":"Mr. Osek","age":"18"},{"id":"2","name":"Kevin","age":"19"}]


    Wenn du Https haben willst brauchst du auch ein Zertifikart.


    Client Server Kommunikation https mit Zertifikaten


    Ps. halte dich mal wirklich an den link von Andy61


    Zuerst muss aber immer ein Http Get erfolgen kein Post sory.
    Mit dem Browser schickst du immer ein Get wenn du eine Seite anforderst.

  • Naja, OkHttp ist zwar für mich deutlich übersichtlicher und gefällt mir auch direkt besser :D (danke dafür) aber mein Problem löst es nicht, erstmal hier mein Code:


    So, wenn ich auf die ip über den Browser gehe funktioniert alles, die App spuckt mir allerdings wieder folgenden Warn aus:



    Wieder der Cleartextscheiß ._.
    Ich hab schon z.B. mit "https://google.com/" probiert, da ging einwandfrei... bei "http://google.com/" bekomm ich den gleichen Fehler, aber wenn ich meine Website auf https umstelle hab ich ja wieder das, dass der mein Zertifikat nicht akzeptiert und ich will mir garantiert keins kaufen nur um Daten aus ner Datenbank abzurufen...
    Ich bin ja jetzt nicht gerade der Androidprofi, aber es kann doch nicht so schwer sein paar Daten aus ner Datenbank lesen/schreiben zu können, v.a. das klappt ja im Prinzip alles, nur sobald ich das dann in ne App packen will macht mir Android Probleme, kann ich den Cleartexttraffic nicht irgendwie erlauben?

  • Hi für mich sieht dein Code total verdreht aus.
    Hast dich nicht an die beispiele in meinen Link gehalten.
    http://www.zoftino.com/android-okhttp-example


    Neben bei gesagt sind das keine Fehler sondern nur warnungen.




    wenn du mit Https arbeiten willst brachst du definitiv ein zertifikat auf deinem server. Wenn es ein gekauftes von einer ofizellen stelle ist, wir Android es auch ohne Probleme Anerkennen. Bei einem selbst erstellte musst du das dem User mitgeben damit er es installieren kann oder schaue dir das Thema „Client Server Kommunikation https mit Zertifikaten“ an.



    Zu deinem Code.
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectionSpecs(Arrays.asList(
    ConnectionSpec.MODERN_TLS,
    ConnectionSpec.CLEARTEXT,
    ConnectionSpec.COMPATIBLE_TLS))
    .build();
    Ist irgentwie nicht richtig . entspricht auch nicht den üblichen Beispielen.
    Die Variable "okHttpClient" bekommt somit auch keine Instznz auf OkHttpClient()




    So erstellt man keinen Bulider.
    Dem Client wird kein Bulider übergeben. Mach das einzeln.


    Habe das Gefühl das du dich mal mit dem http Protokoll auseinandersetzen solltest. Da nutzen dir die besten libs nichts wenn du nicht weißt wann du was brauchst zb was ein get oder ein post Aufruf ist usw. Das war auch das Problem in deiner ersten Version.


    Wir gesagt kann ich vom Browser auf deinen Server mit http zugreifen IP steht ja im Quellcode. Was da für ein string kommt habe ich schon gepostet. Ist der richtig?


    Dieser Code entsricht dem was du mit deinem Browser machst. einfach ein Get.
    mit call back methode Async


    Auserdem gibt es auch scheinbar Probleme beim aufruf des TextView aus der MainActivity bin mir nicht sicher ob das in der runOnUiThread mit der textView Variablen so past . Ich würde die Global deffiniren und nicht in der onCrate und schon gar nicht final. da kannste sie auch nicht mehr ändern. Mach die Global im Klassenrupf.


    Das geht mit sichrheit schief.i

  • Tut mir leid, ich probier seit Wochen einfach nur noch verschiedenste Sachen aus, daher sieht der Code so durcheinander aus. Das aus deinem Link hab ich ausprobiert.


    Der String der da kommt stimmt.


    Die Permission im Manifest hab ich gesetzt:


    Muss ich sonst noch was machen? Was genau meinst du mit "und zur Laufzeit"?

  • Ja die Premission Internet im Manifest solte reichen da Internet nicht zu den Dangerous Permissions gehört.
    Somit brauchst du zur laufzeit keine setzen abfragen.


    Zum Thema Cleartexttraffic. Eigentlich erkennt OkHttp an der Url ob es http oder Https mit SSL Verschlüsselung ist. Da du kein Zertifikat hast kannst du nur http machen . Arber mit den



    OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectionSpecs(Arrays.asList(
    ConnectionSpec.MODERN_TLS,
    ConnectionSpec.CLEARTEXT,
    ConnectionSpec.COMPATIBLE_TLS))
    .build();



    Weist du Okhttp an es codiert zu schicken.
    "das ist auch nicht aus den Beispiel Link"



    OkHttpClient okHttpClient = new OkHttpClient();.
    Sollte reichen und er macht das selber wenn er auf eine Https Seite Kommt Natürlich nur bestätigte Zertifikate .

  • Was kommt denn für ein Fehler? Wir sprechen estmal nur von http://
    Hast du auch das mit dem Text View geändert denn das wird auch nicht gehen?
    wenn du es dir im debugger ansiehst, kommt in der onResponse Methode was an?


    Die Asyncone Geschichte brauchst du auch nicht denn OkHttp läuft in einen eigenen Thread.


    nimm mal den einfachen Code


    Du solltest auch bedenken das das Beispiel als Rückgabe Wert vo einer HTML Webseite susgeht und du nur den body Teil abfragst den du wohl Gar nicht hast.

  • Ähhm okay


    Code
    android:usesCleartextTraffic="true"

    Das hat gelöst :D Ich dachte zwar dass ich das schonmal probiert hätte, aber naja. Das mit der Rückgabe funktioniert auch alles einwandfrei jetzt, ich werd auf jeden Fall auch nochmal die einfache Methode probieren, aber die andere funktioniert jetzt auch ganz in Ordnung für mich, danke für deine Geduld und Hilfe jogimuc :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!