ja, das mit ESP8266WebServer webserver.arg("uname") weiß ich und nutze ich auch für die Verbindung zu meinen Clients (Port 8081):
ESP8266WebServer lanserver(8081);
(ich habe ja beide libs eingebunden), aber ich wüsste nicht, wie mein Code umgestrickt werden müsste, damit auch die websites zusätzlich mit ESP8266WebServer statt mit WiFiServer laufen.
Immerhin aber funktioniert doch cstringarg korrekt, er findet alle Suchstrings korrekt in allen testcodes, in meinem speziellen Fall steht da ja auch
&upwd=yy
drin, und auch das wird gefunden, also wo ist das Problem dann?
Was macht das Programm bei dir, wenn du es compilierst und ausführst, ggf. mit weiteren Serial.println zum debuggen?
- - - Aktualisiert - - -
den cstrinarg code habe ich jetzt umgestrickt auch für '?', trotzdem der alte upwd Fehler:
Code:
int16_t strstrpos(char * haystack, char * needle) // find 1st occurance of substr in str
{
char *p = strstr(haystack, needle);
if (p) return p - haystack;
return -1; // Not found = -1.
}
//----------------------------------------------------------------------------
const int MAXLEN = 1024;
const int TOKLEN = 64;
char * cstringarg( char* haystack, char* vname, char* sarg ) {
int i=0, pos=-1;
unsigned char ch=0xff;
char kini[3] = "&"; // start of varname: '&':
char kequ[3] = "="; // end of varname, start of argument: '='
char needle[TOKLEN]=""; // complete pattern: &varname=abc1234
strcpy(sarg,"");
strcpy(needle, kini);
strcat(needle, vname);
strcat(needle, kequ);
pos = strstrpos(haystack, needle);
if(pos==-1) {
needle[0]='?';
pos = strstrpos(haystack, needle);
if(pos==-1) return sarg;
}
pos=pos+strlen(vname)+2; // start of value = kini+vname+kequ
while( (ch!='&')&&(ch!='\0') ) {
ch=haystack[pos+i];
if( (ch=='&')||(ch==';')||(ch==' ')||(ch=='\0') ||(ch=='\n')
||(i+pos>=strlen(haystack))||(i>TOKLEN-1) ) {
sarg[i]='\0';
return sarg;
}
if( (ch!='&') ) {
sarg[i]=ch;
i++;
}
}
return sarg;
}
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("Test mit cstringarg()");
Serial.println();
char htmlstring[1024]="html teststring evtl mit Fehlern ?upwd0=QMARKupwd0&upwd1=testupwd1&upwd2=testupwd2 &upwd13=testupwd13&upwd224=testupwd224 EndeTststring";
char argstring[64]="";
cstringarg(htmlstring, "upwd0", argstring);
Serial.print("upwd0 >>"); Serial.print(argstring); Serial.println("<< soll: >>QMARKupwd0<<");
cstringarg(htmlstring, "upwd1", argstring);
Serial.print("upwd1 >>"); Serial.print(argstring); Serial.println("<< soll: >>testupwd1<<");
cstringarg(htmlstring, "upwd2", argstring);
Serial.print("upwd2 >>"); Serial.print(argstring); Serial.println("<< soll: >>testupwd2<<");
cstringarg(htmlstring, "upwd13", argstring);
Serial.print("upwd13 >>"); Serial.print(argstring); Serial.println("<< soll: >>testupwd13<<");
cstringarg(htmlstring, "upwd224", argstring);
Serial.print("upwd224 >>"); Serial.print(argstring); Serial.println("<< soll: >>testupwd224<<");
cstringarg(htmlstring, "upwd9", argstring);
Serial.print("upwd9 >>"); Serial.print(argstring); Serial.println("<< soll: >><< (// not found)");
}
void loop() {
}
wo also liegt das TOP Problem, wenn der Eingabestring anfangs identisch, aber insgesamt zu lang ist?
Lesezeichen