Ich habe mit POST und GET in C# gearbeitet, aber der Versuch, es in C zu implementieren, wird für mich etwas verwirrend.C Programmierung - Http POST Anfrage mit Parametern
Ich habe erfolgreich mit einer Steckdose mit 8443-Port auf meinem lokalen Rechner verbunden.
Jetzt versuche ich eine POST-Anfrage mit 3 Parametern an die 127.0.0.1:8443/xxxx/xxxAPI
URL zu senden.
Normalerweise in GET kann ich die Abfrage Zeichenfolgen in meiner URL selbst anhängen ... aber in POST brauche ich einen Nachrichtentext, ContentHeader, Type etc und dann meine Parameter.
Ich habe einen benutzerdefinierten TCP-Code in C, der mir hilft, eine Verbindung zum Server herzustellen. Nach erfolgreicher Verbindung versuche ich so etwas wie den folgenden Pseudocode zu machen ... Aber offensichtlich weiß ich nicht, was ich tue ... Kann mir jemand helfen?
sprintf(szBuff, "POST /xxxx/xxxxxxAPI HTTP/1.1\r\n");
sprintf(contentHeader, "Content-Length: %d\r\n", 20);
send(iSock, szBuff, strlen(szBuff), 0);
send(iSock, "Accept: */*\r\n", 15, 0);
send(iSock, "User-Agent: Mozilla/4.0\r\n", 27, 0);
send(iSock, contentHeader, strlen(contentHeader), 0);
send(iSock, "Accept-Language: en-us\r\n", 26, 0);
send(iSock, "Accept-Encoding: gzip, deflate\r\n", 34, 0);
send(iSock, "Host: ", 6, 0);
send(iSock, "hostname", 8, 0);
send(iSock, "\r\n", 4, 0);
send(iSock, "Content-Type: application/x-www-form-urlencoded\r\n", 50, 0);
send(iSock, "\r\n", 4, 0);
send(iSock, "\r\n", 4, 0);
send(iSock, parameters, strlen(parameters), 0);
send(iSock, "\r\n", 4, 0);
/*if (write(iSock, szBuff, sizeof(szBuff)) == -1)
LogToFile("Error while request being sent to the server");*/
‚do {...} while (0); '??? –
Entschuldigung, das ist Teil der Fehlerüberprüfung, die ich nicht im Code zeige ... Ich habe es entfernt, um Verwirrung zu vermeiden – Philo
Diese hartkodierten Längen sind eine schlechte Idee. Und einige von ihnen sind falsch. '" \ r \ n "' ist eine Zeichenkette aus 2 Zeichen, nicht 4. Außerdem sendest du 3 aufeinanderfolgende '\ r \ n' Paare nach dem Inhaltstyp, was 1 zu viel ist. Sind Sie sicher, dass Sie nicht nur 'fdopen' verwenden möchten? –