cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: Issue With curl_easy_perform

From: Jeff Phillips <jeff_at_seasideresearch.com>
Date: Fri, 31 Mar 2006 17:14:07 -0800 (PST)

Hello Saikat,

Your implementation of write_data should return size *
nmemb, so that libcurl knows that your application has
processed the data.

Take care,
Jeff Phillips

--- Saikat Kanjilal <sxk1969_at_hotmail.com> wrote:

> Hello All:
> I am trying to use libcurl to do a simple http_post,
> I have the code below,
> everything works like a charm except that
> curl_easy_perform keeps popping up
> this window, I have a callback function that I have
> written using
> CURLOPT_WRITEFUNCTION but that still does not make
> the dos window completely
> go away, any help on this would be much appreciated.
> I have been struggling
> with this for a day or so, any ideas??
>
>
>
> /* libcurl callback function */
> extern "C" size_t write_data(void *source ,size_t
> size ,size_t nmemb ,void
> *userData);
>
> extern "C" size_t write_data(void *source ,size_t
> size ,size_t nmemb ,void
> *userData)
> {
> size_t retval=0;
> std::cout<<"Inside write_data\n";
> return retval;
> }
>
>
> int MyClass::uploadFile(std::string URL,std::string
> path)
> {
> CURL *curl;
> CURLcode res;
>
> struct curl_httppost *formpost=NULL;
> struct curl_httppost *lastptr=NULL;
> struct curl_slist *headerlist=NULL;
> char buf[] = "Expect:";
> bool delFile = false;
>
> curl_global_init(CURL_GLOBAL_ALL);
>
> /* Fill in the file upload field */
> curl_formadd(&formpost,
> &lastptr,
> CURLFORM_COPYNAME, "sendfile",
> CURLFORM_FILE, path.c_str(),
> CURLFORM_END);
>
> /* Fill in the filename field */
> curl_formadd(&formpost,
> &lastptr,
> CURLFORM_COPYNAME, "filename",
> CURLFORM_COPYCONTENTS, path.c_str(),
> 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 we have a handle proceed with the transaction
> */
> if(curl)
> {
> curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
> &write_data);
>
> /* what URL that receives this POST */
> curl_easy_setopt(curl, CURLOPT_URL, URL.c_str());
> curl_easy_setopt(curl, CURLOPT_HTTPPOST,
> formpost);
> res = curl_easy_perform(curl);
>
> /* if the file was transported successfully we
> need to delete
> the file else wait a while and try to upload
> */
> if (res==CURLE_OK)
> delFile=true;
> else
> {
> /* if we are here we wait
> and try the upload again till we are
> successful
> for now we set this to 2 minutes
> later it will be configurable
> */
> Sleep(120000);
> uploadFile(URL,path);
> }
>
>
> /* cleanup */
> curl_easy_cleanup(curl);
>
> /* then cleanup the formpost chain */
> curl_formfree(formpost);
>
> /* free slist */
> curl_slist_free_all (headerlist);
> }
>
> if (delFile)
> DeleteLog(path);
> return res;
> }
>
> Thanks Again
>
>
>
Received on 2006-04-01