WSADATA wsa;
std::string domin;
int status;
struct addrinfo hints = { 0 }, * res, * p;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
SetConsoleCP(GetACP());
SetConsoleOutputCP(GetACP());
if (status = WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
std::cout << "Error: of WSAStatus: " << gai_strerror(status) << std::endl;
return status;
}
std::cout << "Enter domin: " << std::endl;
std::getline(std::cin, domin);
if (status = getaddrinfo(domin.c_str(), "80", &hints, &res) != 0) {
std::cout << ("Error: of getaddrinfo", gai_strerror(status));
return status;
};
std::string buffhost = "HTTP/1.0\r\nHost: ";
std::string content = "Content-Type: application/x-www-form-urlencoded\r\nContent-Length:\r\n\r\n";
std::string fine = {0};
char sendbuf[1024];
if (1) {
buffhost = buffhost + domin + "\r\n";
fine = buffhost + content;
memcpy(sendbuf, fine.c_str(), 1024);
std::cout << fine << std::endl;
};
char ipstr[1024];
int s;
char bufrecv[2048];
for (p = res; p != NULL; p = p->ai_next) {
const char* ipver;
void* addr;
if (p->ai_family == AF_INET) {
struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
addr = &(ipv4->sin_addr);
ipver = "IPv4: ";
}
else {
struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr;
addr = &(ipv6->sin6_addr);
ipver = "IPv6: ";
}
inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
std::cout << "addres: " << ipver << ipstr << std::endl;
if (((s = socket(p->ai_family, p->ai_socktype, p->ai_protocol))) == INVALID_SOCKET) {
std::cout << "error of socket: " << WSAGetLastError() << std::endl;
continue;
}
if ((connect(s, p->ai_addr, p->ai_addrlen)) == INVALID_SOCKET) {
std::cout << "Error of connect: " << WSAGetLastError() << std::endl;
continue;
}
send(s, sendbuf, sizeof(sendbuf), 0);
if (recv(s, bufrecv, sizeof(bufrecv), 0) == NULL) {
std::cout << " recv " << WSAGetLastError() << std::endl;
}
};
freeaddrinfo(res);
WSACleanup();
system("pause");
return 0;
}
HTTP/1.0
Host: domain.com
Content-Type: application/x-www-form-urlencoded
Content-Length:
send(s, sendbuf, sizeof(sendbuf), 0);
- почему sizeof? 1024 байта с кучей 0x00 хотите послать несчастному серверу? int main() {
const char* endl = "\r\n";
WSADATA wsa;
std::string domin;
int status;
std::string write_data;
struct addrinfo hints = { 0 }, * res, * p;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
SetConsoleCP(GetACP());
SetConsoleOutputCP(GetACP());
if (status = WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
std::cout << "Error: of WSAStatus: " << gai_strerror(status) << std::endl;
return status;
}
std::cout << "Enter domin: " << std::endl;
std::getline(std::cin, domin);
if (status = getaddrinfo(domin.c_str(), "80", &hints, &res) != 0) {
std::cout << ("Error: of getaddrinfo", gai_strerror(status));
return status;
};
{
std::ostringstream ws;
ws << "GET / HTTP/1.1" << endl;
ws << "Host: " << domin << endl;
ws << "Accept: text/html, text/*" << endl;
ws << "Connection: close" << endl;
ws << endl;
write_data = ws.str();
}
std::cout << write_data;
char ipstr[1024];
int s = INVALID_SOCKET;
char bufrecv[2048];
for (p = res; p != NULL; p = p->ai_next) {
const char* ipver;
void* addr;
if (p->ai_family == AF_INET) {
struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
addr = &(ipv4->sin_addr);
ipver = "IPv4: ";
}
else {
struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr;
addr = &(ipv6->sin6_addr);
ipver = "IPv6: ";
}
inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
std::cout << "addres: " << ipver << ipstr << std::endl;
if (s != INVALID_SOCKET) {
shutdown(s, SD_BOTH);
closesocket(s);
}
if (((s = socket(p->ai_family, p->ai_socktype, p->ai_protocol))) == INVALID_SOCKET) {
std::cout << "error of socket: " << WSAGetLastError() << std::endl;
continue;
}
if ((connect(s, p->ai_addr, p->ai_addrlen)) == SOCKET_ERROR) {
std::cout << "Error of connect: " << WSAGetLastError() << std::endl;
continue;
}
bool success = true;
int writed = 0;
for (size_t i = 0, data_len = write_data.length(); i < data_len; i += writed) {
writed = send(s, write_data.c_str() + i, (int)min(data_len - i, INT_MAX), 0);
if (writed == SOCKET_ERROR) {
std::cout << "Error of send: " << WSAGetLastError() << std::endl;
success = false;
break;
}
}
if (success) {
int readed;
while ((readed = recv(s, bufrecv, sizeof(bufrecv), 0)) != SOCKET_ERROR && readed != 0) {
std::cout << std::string(bufrecv, readed);
}
if (readed == SOCKET_ERROR) {
std::cout << " recv " << WSAGetLastError() << std::endl;
}
break;
}
}
if (s != INVALID_SOCKET)
{
shutdown(s, SD_BOTH);
closesocket(s);
}
freeaddrinfo(res);
WSACleanup();
system("pause");
return 0;
}