- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 97

Thema: esp8266, Arduino IDE: neuer Versuch: warum wird website sofort beendet?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    dieser Teil mit der Extrahierung von strupwd und struname ist hier nur verkürzt wiedergegeben, um die Lesbarkeit zu erhöhen, meine eigene Methode ist recht kompliziert.
    Wie würdest DU diese Extrahierung samt Vergleich machen, und, wo wir gerade dabei sind, ggf. mit POST anstelle von GET?

    Vieleicht liegt ja tatsächlich hier der Hase im Pfeffer...?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    ich habs nochmals geändert und ein Schnipsel eingefügt:

    Code:
    bool authorized=false;
    
    
    
    
    void handleNotAuthorized() {
      String readString = "";
      char   strinput[MAXLEN], strupwd[TOKLEN], struname[TOKLEN] ;
      
      WiFiClient client = wifiserver.available();
    
    
    
    
      if (client) {
    
    
    
    
              //---------------------------------------
              // debug
              // authorized=true;
    
    
    
    
              strcpy(strinput, "");
              strcpy(strupwd, "");
              strcpy(struname, "");
    
    
    
    
      
    
    
    
    
              while ( client.connected() ) {
                if (authorized) return;
    
    
    
    
                if ( client.available() ) {
                  char c = client.read();
    
    
    
    
                  //read char by request
                  readString = "";
                  while ( (readString.length() < TOKLEN) && (c != '\n') ) {
                      readString += c;
                      c = client.read();
                  }
            
                  readString.toCharArray(strinput, MAXLEN);
             
                  if(strstr(website_upwd,strupwd)!=NULL & strstr(website_uname,struname)!=NULL)
                  {
                    authorized = true;
                    readString = "";
                    return;           
                    // return;  // <<< selbes Ergebnis, egal ob kommentiert oder auskommentiert
                  }    
          
                  //if HTTP request has ended
                  while ( c != '\n') { 
                      c = client.read();
                  }
    
    
                  if (c == '\n') {
                     //client.flush();
    
    
    
    
                    //now output html data header
    
    
    
    
                    String script = "";
    
    
    
    
                    script += ("HTTP/1.1 200 OK\r\n");
                    script += ("Content-Type: text/html\r\n");
                    script += ("Connection: close\r\n");
                    script += ("\n");  //  do not forget this one //????
                    script += ("<!DOCTYPE html> \n");
                    script += ("<html> \n");
            
                    script += ("<head> \n");
    
    
    
    
                    // utf-8 für "°" Zeichen
                    script +=  "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> \n" ;
                    script +=  "<title>" ;        
                    script +=  "</title> \n" ;
                    script +=  "</head> \n" ;
                    script +=  "<body> \n" ;
            
                    script += ("<h2><p style=\"color:rgb(255,0,191);\"> log in to proceed: </p> </h2> \n");
    
    
    
    
                    script += ("<FORM ACTION='/' method=GET > \n");
                    script += ("<h2>user name:  <INPUT TYPE=text NAME='uname' VALUE=''  MAXLENGTH='50'> </h2> \n");
                    script += ("<h2>password :  <INPUT TYPE=PASSWORD NAME='upwd' VALUE='' MAXLENGTH='50'> </h2> \n");
    
    
    
    
                    script += ("<h2><INPUT TYPE=SUBMIT></h2> \n");
    
    
    
    
                    script += ("</FORM> \n");
                    script += ("<BR> \n");
                    script += ("</body> \n");
                    script += ("</html> \n");
    
    
    
    
                    client.println(script);
                    delay(100);
            
                    //stopping client
                    client.stop();
                    //clearing string for next read
                    //readString = "";
                  }
                }
                //delay(1);
              }
      }
    }

    entscheidend ist, dass die Seite jedesmal angezeigt wird, wenn der Browser eine Anfrage an den Server stellt. Denn erst dann kann man das Passwort eingeben und den Namen, was dann ausgewertet werden muss.
    Ob das Passwort stimmt oder ob der Vergleich dazu hinhaut wissen wir nicht, weil der Teil fehlt. Man kann das umschreiben, ich habe aber nicht die Möglichkeit, das mit 2.5.x zu probieren - glaub ich.
    Muss mal sehen. Das kann so schwer nicht sein.

  3. #3
    HaWe
    Gast
    in dieser Form springt es wieder sofort aus der Website raus, wie ganz am Anfang.

    - - - Aktualisiert - - -

    mit
    Code:
     
       while(client.connected()) {
                 delay(10);
       }          
    
       client.stop();
    baut er wieder auf, bleibt aber auch wieder komplett im Formular hängen (wie zuvor)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    wie lese ich diese version beim nodemcu aus?

  5. #5
    HaWe
    Gast
    Werkzeuge => Board => Boardverwalter =>....
    dann in der Eingabezeile
    nodeMCU
    eingeben
    dann steht die Version ganz oben im Feld, Version auswählen ganz unten

    Klicke auf die Grafik für eine größere Ansicht

Name:	Arduino_Boardverwalter.jpg
Hits:	2
Größe:	46,1 KB
ID:	34420

    Klicke auf die Grafik für eine größere Ansicht

Name:	Boardverwalter.jpg
Hits:	3
Größe:	50,8 KB
ID:	34418
    Geändert von HaWe (21.10.2019 um 14:03 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    habe 2.2.0, update wird geladen

    jetzt 2.5.2

    beim nächsten Programmupload auf das Board dann hoffentlich 2.5.2

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    Ich bin mir zwar nicht sicher was du genau bezwecken willst, aber ich würde erstmal versuchen zu verstehen was ich für ein Verhalten erwarte, mich darüber schlau machen wie Browser sich in der gegebenen Situation verhalten und wie ich meinen Code bauen muss damit es auch mit jedem Browser überall funktioniert.

    Webseiten darstellen ist kein Problem, man akzeptiert einen Client, ließt die Anfrage per client.read() aus, sucht die passende Webseite für die aufgerufene Adresse und gibt den HTML code zurück, flush, stop und fertig ist der Lack, das sollte auch einfach so ohne irgendwelche Probleme funktionieren.

    Webaufrufe mit Daten vom Browser zum Server geht per GET oder POST, wobei man die GET Daten auch sofort übermitteln kann, sofern man weis was man eingeben muss.
    Per POST braucht es erst ein Formular, welches man vorher auch zum Client senden muss, dafür braucht es also 2 Anfragen, die erste Anfrage welche die Webseite mit dem Formular an den client sendet und die 2te Anfrage als Action mit POST und dem ausgefüllten Formular.

    Was du also schreiben musst ist eine Schleife, welche (sofern die Verbindung zum Browser offen hält mit wie Moppi schon beschrieben hatte, was allerdings auch nicht garantiert ist) immer client.read() benutzt um Anfragen zu empfangen, auszuwerten und zu verarbeiten und zu beantworten.

    Zu jeder Anfrage muss es auch eine Webseite als Antwort geben, sonst beschwert sich dein Browser wie in deinem Fall dass der Server die Verbindung geschlossen hat!

    Was du brauchst ist ein strukturierterer Ansatz für deine Aufgabe. Außerdem solltest du dich mit einfachen Session-Cookies beschäftigen, sonst bekomst du spätestens dann Probleme wenn du längere Zeit auf der Webseite bist, weil dein Browser irgendwann den Socket von sich aus schließt und du einen neuen "client" bekommst den du dann wieder neu authentifizieren musst. (oder du speicherst dir die IP des client als trick, aber das ist bei leibe nicht sicher und nur als workaround gemeint!!!!!!!)


    --------------


    Am besten schreibst du erstmal einen dummen Server, welcher Browseranfragen annimmt und an den Browser zurück spiegelt um erstmale in Gefühl für die Anfragen zu bekommen.

    Wenn das klappt, braust du dir eine einfache Webseite zusammen, welche bei der richtigen Adresse auch ausgegeben wird.

    Dann baust du in einer der Seiten einen Knopf für eine GET und einen Knopf + Formular für eine POST Anfrage ein.

    Auf jeder Seite lässt du Platz um den Inhalt der Anfrage zu posten und auf Anfragen die du nicht lesen kannst Antwortest du dem Browser wie beim ersten Schritt mit der Anfrage als Antwort um zu verstehen was genau der Browser da gesendet hat.

    So hangelst du dich dann bei deinem Adress-Parser langsam vorwärst und musst nicht in einem einzelnen Codeblock rumstricken
    Geändert von Ceos (21.10.2019 um 14:28 Uhr)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  8. #8
    HaWe
    Gast
    naja, es funktioniert doch im Prinzip, bis auf einen "Schönheitsfehler", username wird korrekt geprüft und pwd auch - zumindest in der Version Seite 2 oben
    https://www.roboternetz.de/community...l=1#post655516 ,
    und auch wenn man hier noch 2x hintereinander ENTER drücken muss.
    Diesen Schönheitsfehler gilt es nun zufinden und ebenfalls auszumerzen - unter core 2.4.0 hat es ja auch noch 100%ig funktioniert.

    Sehr schön wäre es auch, wenn man GET durch POST ersetzen könnte.

    Cookies will ich keine setzen.

    Deine sehr allgemeinen Tipps kann ich allerdings nicht umsetzen, mein Ursprungscode war bereits so leistungsfähig wie ich es überhaupt verstehen und schreiben konnte - für einen ganz neu geschriebenen Code wäre ich ntl auch sehr dankbar .

Ähnliche Themen

  1. arduino ide mit esp8266
    Von NotEvil im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 4
    Letzter Beitrag: 12.01.2017, 14:17
  2. Raspberry Pi 3: Neuer Bastelrechner ist ab sofort verfügbar
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 4
    Letzter Beitrag: 29.02.2016, 20:56
  3. [ERLEDIGT] Google wird am Lenovo-Tablet ohne Zutun beendet
    Von oberallgeier im Forum Offtopic und Community Tratsch
    Antworten: 5
    Letzter Beitrag: 24.11.2015, 08:02
  4. Funktion wird nicht richtig beendet
    Von kowolfgang im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 31.12.2008, 16:37
  5. schieberegister neuer versuch...
    Von Bluesmash im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 11.07.2005, 21:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress