curl_formadd man page on UnixWare

Man page or keyword search:  
man Server   3616 pages
apropos Keyword Search (all sections)
Output format
UnixWare logo
[printable version]



curl_formadd(3)		 libcurl Manual		  curl_formadd(3)

NAME
     curl_formadd - add a section to  a	 multipart/formdata  HTTP
     POST

SYNOPSIS
     #include <curl/curl.h>

     CURLFORMcode curl_formadd(struct curl_httppost ** firstitem,
     struct curl_httppost ** lastitem, ...);

DESCRIPTION
     curl_formadd() is used to append sections	when  building	a
     multipart/formdata	 HTTP  POST  (sometimes	 referred  to  as
     rfc1867-style posts). Append one section  at  a  time  until
     you've added all the sections you want included and then you
     pass the firstitem pointer as parameter to CURLOPT_HTTPPOST.
     lastitem  is  set after each call and on repeated invokes it
     should be left as set to allow repeated invokes to find  the
     end of the list faster.

     After the lastitem pointer follow the real arguments.

     The pointers *firstitem and *lastitem should both be  point-
     ing  to  NULL  in the first call to this function. All list-
     data will be allocated by the function itself. You must call
     curl_formfree  after the form post has been done to free the
     resources again.

     Using POST with HTTP 1.1 implies the use of a "Expect:  100-
     continue"	 header.    You	 can  disable  this  header  with
     CURLOPT_HTTPHEADER as usual.

     First, there are some basics you need  to	understand  about
     multipart/formdata	 posts.	 Each part consists of at least a
     NAME and a CONTENTS part. If  the	part  is  made	for  file
     upload, there are also a stored CONTENT-TYPE and a FILENAME.
     Below here, we'll discuss on what options	you  use  to  set
     these properties in the parts you want to add to your post.

OPTIONS
     CURLFORM_COPYNAME
	  followed by string is used to	 set  the  name	 of  this
	  part.	 libcurl  copies the given data, so your applica-
	  tion doesn't need to keep it around after this function
	  call. If the name isn't zero terminated properly, or if
	  you'd like it to contain zero bytes, you  need  to  set
	  the length of the name with CURLFORM_NAMELENGTH.

     CURLFORM_PTRNAME
	  followed by a string is used for the name of this part.
	  libcurl  will	 use the pointer and refer to the data in

libcurl 7.9.8	    Last change: 24 June 2002			1

curl_formadd(3)		 libcurl Manual		  curl_formadd(3)

	  your application, you must make sure it  remains  until
	  curl	no  longer  needs it. If the name isn't zero ter-
	  minated properly, or if you'd like it to  contain  zero
	  bytes,  you  need  to	 set  the length of the name with
	  CURLFORM_NAMELENGTH.

     CURLFORM_COPYCONTENTS
	  followed by a string is used for the contents	 of  this
	  part,	 the actual data to send away. libcurl copies the
	  given data, so your application doesn't need to keep it
	  around after this function call. If the data isn't zero
	  terminated properly, or if you'd  like  it  to  contain
	  zero bytes, you need to set the length of the name with
	  CURLFORM_CONTENTSLENGTH.

     CURLFORM_PTRCONTENTS
	  followed by a string is used for the contents	 of  this
	  part,	 the  actual  data to send away. libcurl will use
	  the pointer and refer to the data in your  application,
	  you  must  make  sure	 it  remains until curl no longer
	  needs it. If the data isn't zero  terminated	properly,
	  or  if you'd like it to contain zero bytes, you need to
	  set	  the	  length     of	    the	    name     with
	  CURLFORM_CONTENTSLENGTH.

     CURLFORM_CONTENTSLENGTH
	  followed by a long setting the length of the contents.

     CURLFORM_FILECONTENT
	  followed by a file name, makes that file read	 and  the
	  contents will be used in as data in this part.

     CURLFORM_FILE
	  followed by a file name, makes this part a file  upload
	  part.	 It  sets  the file name field to the actual file
	  name used here, it gets the contents of  the	file  and
	  passes  as  data and sets the content-type if the given
	  file match one of the new internally known file  exten-
	  sion.	  For CURLFORM_FILE the user may send one or more
	  files in one part by providing  multiple  CURLFORM_FILE
	  arguments  each  followed  by	 the  filename	(and each
	  CURLFORM_FILE	    is	   allowed     to     have	a
	  CURLFORM_CONTENTTYPE).

     CURLFORM_CONTENTTYPE
	  followed by a pointer to a string with  a  content-type

libcurl 7.9.8	    Last change: 24 June 2002			2

curl_formadd(3)		 libcurl Manual		  curl_formadd(3)

	  will	make  curl  use	 this given content-type for this
	  file upload part, possibly  instead  of  an  internally
	  chosen one.

     CURLFORM_FILENAME
	  followed by a pointer to a string to a name, will  make
	  libcurl  use	the  given  name in the file upload part,
	  instead of the actual file name given to CURLFORM_FILE.

     CURLFORM_BUFFER
	  followed by a string, tells libcurl that a buffer is to
	  be  used  to	upload	data instead of using a file. The
	  given string is used as the  value  of  the  file  name
	  field in the content header.

     CURLFORM_BUFFERPTR
	  followed by a pointer to a data area, tells libcurl the
	  address  of  the  buffer  containing data to upload (as
	  indicated with CURLFORM_BUFFER). The buffer  containing
	  this	  data	  must	 not   be   freed   until   after
	  curl_easy_cleanup(3)	is  called.  You  must	also  use
	  CURLFORM_BUFFERLENGTH	 to  set  the length of the given
	  buffer area.

     CURLFORM_BUFFERLENGTH
	  followed   by	  a   long   with   the	  size	 of   the
	  CURLFORM_BUFFERPTR  data area, tells libcurl the length
	  of the buffer to upload.

     CURLFORM_ARRAY
	  Another possibility to send options  to  curl_formadd()
	  is  the  CURLFORM_ARRAY  option,  that  passes a struct
	  curl_forms array pointer as its value. Each  curl_forms
	  structure  element  has  a  CURLformoption  and  a char
	  pointer. The final element  in  the  array  must  be	a
	  CURLFORM_END.	 All  available options can be used in an
	  array, except the CURLFORM_ARRAY  option  itself!   The
	  last	 argument   in	such  an  array	 must  always  be
	  CURLFORM_END.

     CURLFORM_CONTENTHEADER
	  specifies extra headers  for	the  form  POST	 section.
	  This takes a curl_slist prepared in the usual way using
	  curl_slist_append and appends the list  of  headers  to
	  those	 libcurl  automatically	 generates. The list must
	  exist while the POST occurs, if you free it before  the

libcurl 7.9.8	    Last change: 24 June 2002			3

curl_formadd(3)		 libcurl Manual		  curl_formadd(3)

	  post completes you may experience problems.

	  When	 you've	  passed   the	 HttpPost   pointer    to
	  curl_easy_setopt(3)	 (using	   the	 CURLOPT_HTTPPOST
	  option), you must not free the list until after  you've
	  called curl_easy_cleanup(3) for the curl handle.

	  See example below.

RETURN VALUE
     0 means everything was ok, non-zero means an error	 occurred
     as <curl/curl.h> defines.

EXAMPLE
      struct curl_httppost* post = NULL;
      struct curl_httppost* last = NULL;
      char namebuffer[] = "name buffer";
      long namelength = strlen(namebuffer);
      char buffer[] = "test buffer";
      char htmlbuffer[] = "<HTML>test buffer</HTML>";
      long htmlbufferlength = strlen(htmlbuffer);
      struct curl_forms forms[3];
      char file1[] = "my-face.jpg";
      char file2[] = "your-face.jpg";
      /* add null character into htmlbuffer, to demonstrate that
	 transfers of buffers containing null characters actually work
      */
      htmlbuffer[8] = '\0';

      /* Add simple name/content section */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
		   CURLFORM_COPYCONTENTS, "content", CURLFORM_END);

      /* Add simple name/content/contenttype section */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
		   CURLFORM_COPYCONTENTS, "<HTML></HTML>",
		   CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);

      /* Add name/ptrcontent section */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
		   CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);

      /* Add ptrname/ptrcontent section */
      curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
		CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
		namelength, CURLFORM_END);

      /* Add name/ptrcontent/contenttype section */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
		   CURLFORM_PTRCONTENTS, htmlbuffer,
		   CURLFORM_CONTENTSLENGTH, htmlbufferlength,
		   CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);

libcurl 7.9.8	    Last change: 24 June 2002			4

curl_formadd(3)		 libcurl Manual		  curl_formadd(3)

      /* Add simple file section */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
		   CURLFORM_FILE, "my-face.jpg", CURLFORM_END);

      /* Add file/contenttype section */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
		   CURLFORM_FILE, "my-face.jpg",
		   CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);

      /* Add two file section */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
		   CURLFORM_FILE, "my-face.jpg",
		   CURLFORM_FILE, "your-face.jpg", CURLFORM_END);

      /* Add two file section using CURLFORM_ARRAY */
      forms[0].option = CURLFORM_FILE;
      forms[0].value  = file1;
      forms[1].option = CURLFORM_FILE;
      forms[1].value  = file2;
      forms[2].option  = CURLFORM_END;

      /* Add a buffer to upload */
      curl_formadd(&post, &last,
		   CURLFORM_COPYNAME, "name",
		   CURLFORM_BUFFER, "data",
		   CURLFORM_BUFFERPTR, record,
		   CURLFORM_BUFFERLENGTH, record_length,
		   CURLFORM_END);

      /* no option needed for the end marker */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
		   CURLFORM_ARRAY, forms, CURLFORM_END);
      /* Add the content of a file as a normal post text value */
      curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",
		   CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);
      /* Set the form info */
      curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);

SEE ALSO
     curl_easy_setopt(3), curl_formfree(3)

libcurl 7.9.8	    Last change: 24 June 2002			5

[top]
                             _         _         _ 
                            | |       | |       | |     
                            | |       | |       | |     
                         __ | | __ __ | | __ __ | | __  
                         \ \| |/ / \ \| |/ / \ \| |/ /  
                          \ \ / /   \ \ / /   \ \ / /   
                           \   /     \   /     \   /    
                            \_/       \_/       \_/ 
More information is available in HTML format for server UnixWare

List of man pages available for UnixWare

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net