2

How do i create a curl_form e.g to do a post on stackoverflow?

If i look in source of question form page, I see

<label for="display-name">Name</label>
                <input id="display-name" name="display-name" type="text" size="30" maxlength="30" value="" tabindex="105">
            </div>
            <div>
                <label for="m-address">Email</label>
                <input id="m-address" name="m-address" type="text" size="40" maxlength="100" value="" tabindex="106">
                <span class="edit-field-overlay">never shown</span>
            </div>
            <div>
                <label for="home-page">Home Page</label>
                <input id="home-page" name="home-page" type="text" size="40" maxlength="200" value="" tabindex="107">
            </div>

How do i set these parameters for a curl_httppost structure?

2 Answers 2

5

From the libcurl sample: http://curl.haxx.se/libcurl/c/postit2.html

You don't manipulate curl_httppost directly. You'd write something like this to set the m-address field.

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);

curl_formadd(&formpost,
             &lastptr,
             CURLFORM_COPYNAME, "m-address",
             CURLFORM_COPYCONTENTS, "[email protected]",
             CURLFORM_END);

curl = curl_easy_init();
headerlist = curl_slist_append(headerlist, buf);
if(curl) {
    /* what URL that receives this POST */ 
    curl_easy_setopt(curl, CURLOPT_URL, "http://stackoverflow.com/someurl");
    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);
    res = curl_easy_perform(curl);

    /* always cleanup */ 
    curl_easy_cleanup(curl);

    /* then cleanup the formpost chain */ 
    curl_formfree(formpost);
    /* free slist */ 
    curl_slist_free_all (headerlist);
Sign up to request clarification or add additional context in comments.

Comments

0

As this form isn't a multipart one, maybe you can simply use : http://curl.haxx.se/libcurl/c/http-post.html

CURL *curl;
CURLcode res;

/* In windows, this will init the winsock stuff */ 
curl_global_init(CURL_GLOBAL_ALL);

/* get a curl handle */ 
curl = curl_easy_init();
if(curl) {
  /* First set the URL that is about to receive our POST. This URL can
   just as well be a https:// URL if that is what should receive the
   data. */ 
  curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");
  /* Now specify the POST data */ 
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[email protected]");

  /* 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);
}
curl_global_cleanup();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.