Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

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,643 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

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

Is your Office 365 signature not working the way you want it to? Are signature updates taking up too much of your time? Let's run through the most common problems that an IT administrator can encounter when dealing with Office 365 email signatures.
Originally, this post was published on Monitis Blog, you can check it here . Websites are getting bigger and more complicated by the day. Video, images and custom fonts are all great for showcasing your product or service. But the price to pay in…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will the learn the benefit of plain text editors and code an HTML5 based template for use in further tutorials.

618 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