GET Request Problem

Ein freundliches Hallo !
ich hoffe es hat jemand lust mir zu helfen ...
mein Problem ist das ich mit einem nano und einem W5100 Board ein GET Request an einen server senden möchte was auch nach langem probieren und Hardware umbau endlich funktioniert

die code Zeile : client.println("GET /abfrage.php?1=1405050&2=1 HTTP/1.1");

funktioniert hart codiert super ... nur würde ich gerne denn Inhalt vom get parameter 1 und 2 mit einer variable übergeben .

hab es so versucht was leider nicht zum erfolg führt :

    client.println("GET /");
    client.print("abfrage.php?1=");
    client.print(code1);
    client.print("&2=");
    client.print(id);
    client.print(" HTTP/1.1");

der gesamte code der abfrage

void abfrage(unsigned long code1,int id)
{
client.stop();
  Ethernet.begin(mac, ip, myDns);
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    Serial.println();

//......................................... send the HTTP GET request:............................................
/*
    client.println("GET /");
    client.print("abfrage.php?1=");
    client.print(code1);
    client.print("&2=");
    client.print(id);
    client.print(" HTTP/1.1");
*/
    client.println("GET /abfrage.php?1=1405050&2=1 HTTP/1.1");
//...    
    client.println("Host: 169.254.211.167");
    client.println("Connection: close");
    client.println();
  } else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
}

Neuling1980:
ich hoffe es hat jemand lust mir zu helfen ...

Lust schon ... nur nicht wirklich Ahnung von den Spezialitäten, mit denen Du zu tun hast. Mir ist aber aufgefallen, dass Du viele Anfragestückchen loslässt. Hast Du schon probiert, zuerst die vollständige Anfrage zusammenzuschrauben und dann am Stück zu senden?

Gruß

Gregor

Wäre nicht vielleicht

     client.print("GET /");
    client.print("abfrage.php?1=");
    client.print(code1);
    client.print("&2=");
    client.print(id);
    client.println(" HTTP/1.1");

sinnvoller?

Vielleicht auch der Einsatz von F() für die konstanten Strings?

dickes thx an @Whandall deine Lösung hat Abhilfe geschaffen jetzt funktioniert es genau wie es soll ....

vielleicht kann mir noch geholfen werden beim auslesen der server Antwort ....
im Browser wird mir beim senden der GET parameter eine einfache zahl zwischen 1 und 8 angezeigt die ich nun in eine variable zur weiter Verarbeitung Speichern möchte ... da aber der server auch andere infos als nur die zahl schickt Hab ich keine Ahnung wie ich da rangehen muss ...

mit dem codeteil wird mir serial die Rückmeldung angezeigt

  int len = client.available();
  if (len > 0) {
    byte buffer[900];
    if (len > 900) len = 900;
    client.read(buffer, len);
    if (printWebData) {
      Serial.write(buffer, len);
//      rueckmeldung = (buffer);   funktioniert so nicht

anzeige im seriellen monitor

connecting...

HTTP/1.1 200 OK
Date: Wed, 21 Nov 2018 21:33:57 GMT
Server: Apache/2.4.25 (Raspbian)
Set-Cookie: PHPSESSID=dcs4go4np7f3lnn4ik04ibdel2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 2
Connection: close
Content-Type: text/html; charset=UTF-8


4

Wie bekomme ich die 4 am ende des Textes in eine variable verbackt ?

leider nein

const char buffer[] = R"foo(
HTTP/1.1 200 OK
Date: Wed, 21 Nov 2018 21:33:57 GMT
Server: Apache/2.4.25 (Raspbian)
Set-Cookie: PHPSESSID=dcs4go4np7f3lnn4ik04ibdel2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 2
Connection: close
Content-Type: text/html; charset=UTF-8


4
)foo";

void setup() {
  Serial.begin(250000);
  const char *eline = strstr(buffer, "\n\n");
  if (eline != nullptr) {
    int32_t zahl = strtol(eline+2, nullptr, 0);
    Serial.print(F("Die erhaltene Zahl ist "));
    Serial.println(zahl);
  } else {
    Serial.print(F("Kein Body gefunden"));
  }
}

void loop() {}
Die erhaltene Zahl ist 4

echt super !!!!

Dank @Whandall funktioniert nun alles wie gewünscht .... dickes THX

nur beim kompilieren kommt nun eine Warnung

warning: invalid conversion from 'byte* {aka unsigned char*}' to 'const char*' [-fpermissive] 
 const char *eline = strstr(buffer, "\n\n"); 

note: initializing argument 1 of 'char* strstr(const char*, const char*)'
 extern char *strstr(const char *, const char *) __ATTR_PURE__;
 const char *eline = strstr((const char *)buffer, "\n\n");

sollte die Warnung beseitigen.

vielen herzlichen dank für die rasche Hilfe :grin:

Dein buffer war aus bytes, meiner aus chars.
Ich hätte mein Beispiel besser an deinen Kode anpassen können...

Für Stringmanipulationen gibt es einen Haufen eingebaute Funktionen, eine Übersicht findest du z.B. hier.

Weiterhin viel Spaß beim Programmieren.