====== Web services ====== To get from or post data to a web server you can easily use standard sockets. if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) exit(1); if (connect(s, "checkip.dyndns.com", 80) < 0) exit(2); if (send(s, "GET / HTTP/1.0\r\n\r\n") == -1) exit(3); if ((r = recv(s)) == NULL) exit(4); printf("%s\n", r); if (!strstr(r, "HTTP/1.1 200 OK")) { i = substr(r, strstr(r, "IP Address: ") + 12, strlen(r)); printf("IP Address: %s\n", left(i, strstr(i, ""))); } close(s); exit(0); HTTP/1.1 200 OK Content-Type: text/html Server: DynDNS-CheckIP/1.0 Connection: close Cache-Control: no-cache Pragma: no-cache Content-Length: 102 Current IP CheckCurrent IP Address: 89.12.4.18 IP Address: 89.12.4.18 To get from or post data to a web server you can easily use standard sockets. if ((so = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) exit(1); if (connect(so, "checkip.dyndns.com", 80) < 0) exit(2); if (send(so, "GET / HTTP/1.0\r\n\r\n") == -1) exit(3); if ((s = recv(so)) == NULL) exit(4); printf("RESPONSE: <%s>\n", left(s, p = strstr(s, "\n"))); s = right(s, strlen(s) - p - 1); while ((p = strchr(s, "\n")) > 0) { h = left(s, p); hp = strstr(h, ": "); l = left(h, hp); r = substr(h, hp + 2, strlen(s)-hp-2-1); printf("HEADER: <%s> value <%s>\n", l, r); s = right(s, strlen(s) - p - 1); } printf("BODY: %s\n", s); close(s); exit(0);