[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

How do you upload a file using Curl and HTTP using C++ on Linux?

Posted on 2007-04-05
5
Medium Priority
?
2,817 Views
Last Modified: 2012-08-14
I want to upload an xml file,  using HTTP and Curl and C++. I am using libcurl on linux.  I have no trouble downloading using curl, but uploading always gives me a problem.  I get a segmentation fault whenever I call curl_easy_perform. Can somebody please post some sample code on how to upload a file to an http server. Thanks!!
0
Comment
Question by:mromeo
  • 3
  • 2
5 Comments
 
LVL 53

Expert Comment

by:Infinity08
ID: 18858014
What do you mean by uploading ? Do you mean POST the XML request to an HTTP server, and wait for the XML response ?

Can you show the coded that causes the segmentation fault ?
0
 

Author Comment

by:mromeo
ID: 18858217
No, I want to upload a file to a server.  I'll wait for a response saying it got the file.  Here is my code:

CURL *hCurl = NULL;
...
  CURLcode cc;
   if (!hCurl)
   {
      cc = curl_global_init(CURL_GLOBAL_ALL);
      hCurl = curl_easy_init();
   }

   if (hCurl)
   {
      FILE *fp = fopen("mbrTest.xml", "r");
      char error_buffer[1024];

      if (fp)
      {
         char *url = "http://1.0.0.2/cgi-bin/r50.cgi/ols-mbr.p";

         cc = curl_easy_setopt(hCurl, CURLOPT_URL, url);
         cc = curl_easy_setopt(hCurl, CURLOPT_UPLOAD, 1);
         cc = curl_easy_setopt(hCurl, CURLOPT_VERBOSE, 1);
         cc = curl_easy_setopt(hCurl, CURLOPT_INFILE, "mbrTest.xml");  
         cc = curl_easy_setopt(hCurl, CURLOPT_INFILESIZE, 104);  
         cc = curl_easy_setopt(hCurl, CURLOPT_ERRORBUFFER, &error_buffer);

         cc = curl_easy_perform(hCurl);
         printf("curl easy perform completed -- CURL code = %d\n", cc);

         fclose(fp);
      }

      curl_easy_cleanup(hCurl);
      curl_global_cleanup();
   }
0
 
LVL 53

Accepted Solution

by:
Infinity08 earned 2000 total points
ID: 18858322
Did you take a look at this example (HTTP PUT) :

        http://curl.haxx.se/lxr/source/docs/examples/httpput.c
0
 
LVL 53

Assisted Solution

by:Infinity08
Infinity08 earned 2000 total points
ID: 18858375
More precisely, try using :

      curl_easy_setopt(curl, CURLOPT_READDATA, fp);

instead of :

       cc = curl_easy_setopt(hCurl, CURLOPT_INFILE, "mbrTest.xml");



Also use :

       curl_easy_setopt(curl, CURLOPT_PUT, TRUE);

to choose HTTP PUT
0
 

Author Comment

by:mromeo
ID: 18858766
Both of those worked! Thanks!!
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article demonstrates how to create a simple responsive confirmation dialog with Ok and Cancel buttons using HTML, CSS, jQuery and Promises
Article by: evilrix
Looking for a way to avoid searching through large data sets for data that doesn't exist? A Bloom Filter might be what you need. This data structure is a probabilistic filter that allows you to avoid unnecessary searches when you know the data defin…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
HTML5 has deprecated a few of the older ways of showing media as well as offering up a new way to create games and animations. Audio, video, and canvas are just a few of the adjustments made between XHTML and HTML5. As we learned in our last micr…
Suggested Courses

612 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question