cURL / Mailing Lists / curl-library / Single Mail

curl-library

HTTP PUT pls help me

From: martin hilpert <tecart_at_hipposen.de>
Date: Thu, 18 Dec 2003 07:48:10 +0100

where is the bug?
i use Vc++6
i make a new console app.
input the httpput.c example that you see...
and compiel it it doesnt work.

the only thing i append is the VERBOSE set.

why didnt work that ?

/*****************************************************************************
 * _ _ ____ _
 * Project ___| | | | _ \| |
 * / __| | | | |_) | |
 * | (__| |_| | _ <| |___
 * \___|\___/|_| \_\_____|
 *
 * $Id: httpput.c,v 1.1 2001/09/25 05:55:56 bagder Exp $
 */

#include <stdio.h>

#include <fcntl.h>
#include <sys/stat.h>

#include <curl/curl.h>

/*
 * This example shows a HTTP PUT operation. PUTs a file given as a command
 * line argument to the URL also given on the command line.
 *
 * This example also uses its own read callback.
 */
size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
  size_t retcode;

  /* in real-world cases, this would probably get this data differently
     as this fread() stuff is exactly what the library already would do
     by default internally */
  retcode = fread(ptr, size, nmemb, stream);

  fprintf(stderr, "*** We read %d bytes from file\n", retcode);

  return retcode;
}

int main(int argc, char **argv)
{
  CURL *curl;
  CURLcode res;
  FILE *ftpfile;
  FILE * hd_src ;
  FILE * debug;
  int hd,d ;
  struct stat file_info;

  char *file;
  char *url;

  if(argc < 3)
    return 1;
 
  file= argv[1];
  url = argv[2];
  
  /* get the file size of the local file */
  hd = open(file, O_RDONLY) ;
  fstat(hd, &file_info);
  close(hd) ;

  /* get a FILE * of the same file, could also be made with
     fdopen() from the previous descriptor, but hey this is just
     an example! */
  hd_src = fopen(file, "rb");
  
  /* In windows, this will init the winsock stuff */
  curl_global_init(CURL_GLOBAL_ALL);

  /* get a curl handle */
  curl = curl_easy_init();
  if(curl) {
    /* we want to use our own read function */
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);

    /* enable uploading */
    curl_easy_setopt(curl, CURLOPT_UPLOAD, TRUE);
 
 curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE);
    /* HTTP PUT please */
    curl_easy_setopt(curl, CURLOPT_PUT, TRUE);

    /* specify target */
    curl_easy_setopt(curl,CURLOPT_URL, url);

    /* now specify which file to upload */
    curl_easy_setopt(curl, CURLOPT_INFILE, hd_src);

    /* and give the size of the upload (optional) */
    curl_easy_setopt(curl, CURLOPT_INFILESIZE, file_info.st_size);

    /* Now run off and do what you've been told! */
    res = curl_easy_perform(curl);

    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  fclose(hd_src); /* close the local file */

  curl_global_cleanup();
  return 0;
}

C:\martin\testput\Debug>testput c:\putty.exe http://sky01.tecart.de/martin/web/
* About to connect() to sky01.tecart.de:80
* Connected to sky01.tecart.de (192.168.0.12) port 80
> PUT /martin/web/ HTTP/1.1
Host: sky01.tecart.de
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Content-Length: 356352

*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 16384 bytes from file
*** We read 12288 bytes from file
*** We read 0 bytes from file
< HTTP/1.1 403 Forbidden
< Date: Thu, 18 Dec 2003 06:42:11 GMT
< Server: Apache/1.3.29 (Unix) PHP/4.3.4
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>403 Forbidden</TITLE>
</HEAD><BODY>
<H1>Forbidden</H1>
You don't have permission to access /martin/web/
on this server.<P>
<HR>
<ADDRESS>Apache/1.3.29 Server at sky01.tecart.de Port 80</ADDRESS>
</BODY></HTML>
* Connection #0 left intact
* Closing connection #0

-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills. Sign up for IBM's
Free Linux Tutorials. Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
Received on 2003-12-18