#include <vector>
#include <string>
#include <sstream>
#include <iostream>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsa_data;
if( WSAStartup( MAKEWORD( 2, 2 ), &wsa_data ) != 0 ) {
std::cerr << "WSAStartup failed.\n";
return EXIT_FAILURE;
}
SOCKET s = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( s == INVALID_SOCKET ) {
std::cerr << "Failed to create socket.\n";
WSACleanup();
return EXIT_FAILURE;
}
SOCKADDR_IN addr;
addr.sin_port = htons( 80 );
addr.sin_family = AF_INET;
char const * host_addr = "185.27.252.35";
addr.sin_addr.s_addr = inet_addr( host_addr );
if( connect( s, reinterpret_cast< SOCKADDR* >( &addr ), sizeof addr ) ) {
std::cerr << "Failed to connect.\n\n";
closesocket( s );
WSACleanup();
return EXIT_FAILURE;
}
std::cout << "Account: ";
std::string acct; std::cin >> acct;
std::cout << "Password: ";
std::string pass; std::cin >> pass;
std::cout << "Mail: ";
std::string mail; std::cin >> mail;
std::stringstream content;
content << "account=" << acct << "&pass=" << pass << "&email=" << mail << "&submit=registrieren";
// urlencode()n darfst selber
std::string send_buffer = std::string(
"POST /fabi.php HTTP/1.1\r\n"
"Host: ") + host_addr + "\r\n"
"Accept: text/html\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: " + std::to_string( content.str().length() ) + "\r\n\r\n" + content.str() + "\r\n";
if( send( s, send_buffer.data(), static_cast< int >( send_buffer.length() ), 0 ) == SOCKET_ERROR ) {
std::cerr << "Send failed.\n\n";
closesocket( s );
WSACleanup();
return EXIT_FAILURE;
}
int result;
std::vector< char > answer( 512 );
do {
if( ( result = recv( s, answer.data(), static_cast< int >( answer.size() ), 0 ) ) > 0 )
std::copy( std::begin( answer ), std::begin( answer ) + result, std::ostream_iterator< char >( std::cout ) );
else if( !result )
std::cout << "Connection closed.\n\n";
else
std::cerr << "Receive failed.\n\n";
} while( result > 0 );
if( shutdown( s, SD_BOTH ) == SOCKET_ERROR )
std::cerr << "Shutdown failed.\n\n";
closesocket( s );
WSACleanup();
}