POST an Webseite mit GET
-
Hallo,
wie kann ich in C++ einen Post an eine Webseite schicken und die Antwort dann auch empfangen um sie weiterzuverwenden?
Danke schon mal!
-
Gar nicht. Sich dir ein Framework dafür aus.
-
Windows?
cooky451 schrieb:
thefiloe schrieb:
das ist ja mein problem ich finde nichts und ich bin kein c++ experte wo das auswendig weiß. Deshalb frage ich ja euch.
Du machst einen Socket auf, verbindest dich über TCP auf Port 80 mit "www.whatismyip.org", schickst einmal:
"GET / HTTP/1.0\r\n" "Host: www.whatismyip.org\r\n" "\r\n"Und empfängst dann bis die Verbindung abbricht. Ich habe hier noch C Code rum fliegen mit dem du das testen könntest:
#include <stdio.h> #include <WinSock2.h> #pragma comment (lib, "Ws2_32.lib") void errorexit(int code, const char *msg, ...) { va_list argv; va_start(msg, argv); vprintf(msg, argv); va_end(argv); getchar(); //blah, Windows ;) exit(code); } int main() { char buf[0x1000]; int sock, rval; struct sockaddr_in addr = {0}; struct hostent *host = 0; struct WSAData wsa; if (WSAStartup(WINSOCK_VERSION, &wsa) != 0) errorexit(-1, "WSAStartup() failed with: %i.", WSAStartup(WINSOCK_VERSION, &wsa)); while (!host) { printf("Server: "); fgets(buf, sizeof(buf), stdin); buf[strlen(buf) - 1] = '\0'; host = gethostbyname(buf); } addr.sin_addr = *(struct in_addr*)host->h_addr; addr.sin_family = AF_INET; addr.sin_port = htons(80); buf[0] = '\0'; puts("Message: (double return to send)"); while (!strstr(buf, "\n\n")) { char tmp[0x100]; fgets(tmp, sizeof(tmp), stdin); strcat(buf, tmp); if (strlen(buf) > sizeof(buf) - sizeof(tmp)) break; } sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (!sock) errorexit(-2, "socket() failed with: %i.", WSAGetLastError()); if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) != 0) errorexit(-3, "Could not connect to host: %s. Error: %i.", inet_ntoa(addr.sin_addr), WSAGetLastError()); if (send(sock, buf, strlen(buf), 0) < strlen(buf)) errorexit(-4, "send() failed with: %i.", WSAGetLastError()); while ((rval = recv(sock, buf, sizeof(buf) - 1, 0)) > 0) buf[rval] = '\0', printf("%s", buf); closesocket(sock); WSACleanup(); getchar(); return 0; }
-
@cooky451: danke, werds mal probieren
@EOutOfResources: kennst du ein gutes Framework dafür?
-
libcurl
Lohnt meiner Meinung nach aber erst, wenn man wirklich viele Anfragen machen will.
-
boost::asio
-
http://ideone.com/GyzQL
Schade, dass die Libraries nicht gelinkt werden...
-
anstatt hier mit tausend libraries anzufangen würde ich dir eher raten cooky451s beispiel zu folgen und dich mit socket auseinander setzten.
Ein wunderschönes Tutorial wäre dieses: http://www.c-plusplus.net/forum/169861
Es ist wirklich nicht zu schwer und das ist besser weil du
a) was lernst
b) nicht abhängig von anderen Libraries bist
c) kannst du dein programm ganz nach deinen wünschen gestalten...
-
Walpurgisnacht schrieb:
Hallo,
wie kann ich in C++ einen Post an eine Webseite schicken und die Antwort dann auch empfangen um sie weiterzuverwenden?
Danke schon mal!
Was denn nu?
Einen post (z.B. an ein Forum) mit GET senden oder
POST mit GET (was nicht wirklich Sinn macht) senden?http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5
Du kannst zwar
GET / HTTP/1.1 Host: site.com Content-Type: application/x-www-form-urlencoded Content-Length: 6 et=wassenden, wirst aber wahrscheinlich nur ein
400 Bad Request
als Antwort bekommen.
oder gar nix
oder nur die GET-Seite