Giuly
20-09-2005, 14:15
Hi,
ich benutze hier recv() um sachen aus nen socket zu bekommen. Ich will aber den HTTP-HEader nicht.kann mir vielleicht jemand sagen, wie ich meine funktion so unschreibe, dass es nur den HTTP-Body returned? Funktion:
std::string sockget(std::string host, unsigned short int port, std::string cmd) {
int sock;
struct sockaddr_in addr;
char rcvd[65000];
sock = socket(AF_INET, SOCK_STREAM, 0);
bcopy(gethostbyname(host.c_str())->h_addr, &addr.sin_addr, gethostbyname(host.c_str())->h_length);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
std::cout << "KAPUTT." << std::endl;
exit(1);
} else {
write(sock, cmd.c_str(), cmd.size());
int as = recv(sock,rcvd,sizeof(rcvd),0);
rcvd[as] = '\0';
}
close(sock);
std::string toReturn = std::string(rcvd);
return toReturn;
}
P.S.: std::cout << toReturn.find("\r\n\r\n") << std::endl; gibt übrigens 18446744073709551615 aus.
ich benutze hier recv() um sachen aus nen socket zu bekommen. Ich will aber den HTTP-HEader nicht.kann mir vielleicht jemand sagen, wie ich meine funktion so unschreibe, dass es nur den HTTP-Body returned? Funktion:
std::string sockget(std::string host, unsigned short int port, std::string cmd) {
int sock;
struct sockaddr_in addr;
char rcvd[65000];
sock = socket(AF_INET, SOCK_STREAM, 0);
bcopy(gethostbyname(host.c_str())->h_addr, &addr.sin_addr, gethostbyname(host.c_str())->h_length);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
std::cout << "KAPUTT." << std::endl;
exit(1);
} else {
write(sock, cmd.c_str(), cmd.size());
int as = recv(sock,rcvd,sizeof(rcvd),0);
rcvd[as] = '\0';
}
close(sock);
std::string toReturn = std::string(rcvd);
return toReturn;
}
P.S.: std::cout << toReturn.find("\r\n\r\n") << std::endl; gibt übrigens 18446744073709551615 aus.