C++ POST Form Data
Я смог сделать это в Perl, так что теперь я пытаюсь попробовать его в C++. Моя цель - отправить хеш md5 на http://md5crack.com/crackmd5.php и получить открытый текст обратно. Поправьте меня, если я ошибаюсь, но для этого нужно отправить информацию заголовка. Я не совсем уверен, как это сделать, поэтому я разбил его на отдельные строковые переменные ниже. Как мне отправить восстановленный заголовок на сайт?
string head1= "POST /crackmd5.php HTTP/1.1";
string head2= "Host: md5crack.com";
string Useragent= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 PBSTB/1.2";
string type= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
string content= "Content-Type: application/x-www-form-urlencoded";
string term= "=term=aaaaaaaaa&crackbtn=Crack+that+hash+baby%21";
int hConnect()
{
int iResult;
int recvbuflen = 999999;
char *sendbuf = "098f6bcd4621d373cade4e832627b4f6";
char recvbuf[9999999]="";
WSADATA wsaData;
Socket ConnectSocket;
struct sockaddr_in client Service
iResult=WSAStartup(MAKEWORD(2,2), &wsaData)
if(iResult != NO_ERROR)
{
cout<<"WSA Startup Failed."<<endl;
return 1;
}
ConnectSocket=socket(AF_INET, SOCK_STREAM, IPPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
cout<<"Socket Failed"<<endl;
WSACLEANUP();
return 1;
}
clientService.sin_family=AF_INET;
clientService.sin_addr.s_addr=inet_addr("http://md5crack.com/");
clientService.sin_port=htons(80);
iResult=connect( ConnectSocket, (SOCKADDR*, &clientService, sizeof(clientService));
if(iresult == SOCKET_ERROR)
{
cout<<"Failed to connect"<<endl;
closesocket(connectsocket);
WSACleanup();
return 1;
}
iResult= send(ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
recv(ConnectSocket, recvbuf, recvbuflen, 0);
cout<<recvbuf;
}
2 ответа
libcurl действительно должен решить вашу проблему, ознакомьтесь с их C API здесь. Вот небольшой пример кода для добавления заголовка HTTP:
CURL handle;
struct curl_slist *slist=NULL;
slist = curl_slist_append(slist, "Content-Type: text/html");
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
Кроме того, если вы хотите имитировать взаимодействие с более сложными веб-сайтами (например, с теми, к которым вы не можете посылать данные POST), вы можете попробовать использовать реальную среду для встраивания в Интернет (например, WebKit или Awesomium) для симуляции ключей. нажатия, ввод мышью и вызовы Javascript.