[Question] Form POST via C++ libcURL
Would this work for a simple form post?
It's using the libcURL libraries for C++
I'm going to upgrade it from here and add captcha support and stuff.
This is just the form submit.
Code:
/* This is a Gaia Online account creator
** Written by 323 for Logical Gamers
** Version 1.0
** Created 10-25-2012
** Check www.LogicalGamers.com for updates
*/
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
string userpassword = "password101";
int main(int argc, char *argv[])
{
CURL *curl;
CURLcode res;
struct curl_httppost *formpost=NULL;
struct curl_httppost *lastptr=NULL;
struct curl_slist *headerlist=NULL;
static const char buf[] = "Expect:";
curl_global_init(CURL_GLOBAL_ALL);
//Fill in the username field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "username",
CURLFORM_COPYCONTENTS, "RANDOMLY_GENERATED_STRING_HERE",
CURLFORM_END);
//Fill in the email field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "email",
CURLFORM_COPYCONTENTS, "ADD_YOUR_EMAIL_ADDRESS_HERE",
CURLFORM_END);
//Fill in the password field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "password",
CURLFORM_COPYCONTENTS, userpassword, //make the user's password the string userpassword (password101)
//Fill in the confirm password field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "password_confirm",
CURLFORM_COPYCONTENTS, userpassword,
CURLFORM_END);
//Fill in the date of birth month field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "dob_month",
CURLFORM_COPYCONTENTS, "1",
CURLFORM_END);
//Fill in the date of birth day field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "dob_day",
CURLFORM_COPYCONTENTS, "1",
CURLFORM_END);
//Fill in the date of birth year field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "dob_year",
CURLFORM_COPYCONTENTS, "1980",
CURLFORM_END);
//Fill in the submit field too, even if this is rarely needed
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "send",
CURLFORM_END);
curl = curl_easy_init();
//initalize custom header list (stating that Expect: 100-continue is not wanted
headerlist = curl_slist_append(headerlist, buf);
if(curl) {
//what URL that receives this POST
curl_easy_setopt(curl, CURLOPT_URL, "http://avatarsave.gaiaonline.com/register/html/?step=userinfo&_gaia_t_=296");
if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) )
//only disable 100-continue header if explicitly requested
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
//Perform the request, res will get the return code
res = curl_easy_perform(curl);
//Check for errors
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
//always cleanup
curl_easy_cleanup(curl);
//then cleanup the formpost chain
curl_formfree(formpost);
//free slist
curl_slist_free_all (headerlist);
}
return 0;
}