Commit 2236ba0d authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Peteris Krumins added CURLOPT_COOKIELIST and CURLINFO_COOKIELIST, which is a

simple interface to extracting and setting cookies in libcurl's internal
"cookie jar". See the new cookie_interface.c example code.
parent 463c0f70
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -7,6 +7,15 @@
                                  Changelog


Daniel (27 July 2005)
- Dan Fandrich changes over the last week: fixed numerous minor configure
  option parsing flaws: --without-gnutls, --without-spnego --without-gssapi
  and --without-krb4. Spellfixed several error messages.

- Peteris Krumins added CURLOPT_COOKIELIST and CURLINFO_COOKIELIST, which is a
  simple interface to extracting and setting cookies in libcurl's internal
  "cookie jar". See the new cookie_interface.c example code.

Daniel (13 July 2005)
- Diego Casorran provided patches to make curl build fine on Amiga again.

+2 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ Curl and libcurl 7.14.1

This release includes the following changes:

 o CURLOPT_COOKIELIST and CURLINFO_COOKIELIST
 o trailer support for chunked encoded data streams 
 o -x/CURL_PROXY strings may now contain user+password
 o --trace-time now outputs the full microsecond, all 6 digits
@@ -46,6 +47,6 @@ advice from friends like these:

 John McGowan, Georg Wicherski, Andres Garcia, Eric Cooper, Todd Kulesza,
 Tupone Alfredo, Gisle Vanem, David Shaw, Andrew Bushnell, Dan Fandrich,
 Adrian Schuur, Diego Casorran
 Adrian Schuur, Diego Casorran, Peteris Krumins

        Thanks! (and sorry if I forgot to mention someone)
+2 −1
Original line number Diff line number Diff line
@@ -10,7 +10,8 @@ EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
 post-callback.c multi-app.c multi-double.c multi-single.c		\
 multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c		\
 multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c	\
 anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c
 anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c		\
 cookie_interface.c

all:
	@echo "done"
+110 −0
Original line number Diff line number Diff line
/*****************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 *  This example shows usage of simple cookie interface. 
 */

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <time.h>

#include <curl/curl.h>

static void
print_cookies(CURL *curl)
{
  CURLcode res;
  struct curl_slist *cookies;
  struct curl_slist *nc;
  int i;

  printf("Cookies, curl knows:\n");
  res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
  if (res != CURLE_OK) {
    fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n", curl_easy_strerror(res));
    exit(1);
  }
  nc = cookies, i = 1;
  while (nc) {
    printf("[%d]: %s\n", i, nc->data);
    nc = nc->next;
    i++;
  }
  if (i == 1) {
    printf("(none)\n");
  }
  curl_slist_free_all(cookies);
}

int
main(void)
{
  CURL *curl;
  CURLcode res;

  curl_global_init(CURL_GLOBAL_ALL);
  curl = curl_easy_init();
  if (curl) {
    char nline[256];

    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/"); /* google.com sets "PREF" cookie */
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); /* just to start the cookie engine */
    res = curl_easy_perform(curl);
    if (res != CURLE_OK) {
      fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
      return 1;
    }

    print_cookies(curl);

    printf("Erasing curl's knowledge of cookies!\n");
    curl_easy_setopt(curl, CURLOPT_COOKIELIST, NULL);

    print_cookies(curl);

    printf("-----------------------------------------------\n"
           "Setting a cookie \"PREF\" via cookie interface:\n");
#ifdef WIN32
#define snprintf _snprintf
#endif
    /* Netscape format cookie */
    snprintf(nline, 256, "%s\t%s\t%s\t%s\t%u\t%s\t%s",
      ".google.com", "TRUE", "/", "FALSE", time(NULL) + 31337, "PREF", "hello google, i like you very much!");
    res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
    if (res != CURLE_OK) {
      fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res));
      return 1;            
    }

    /* HTTP-header style cookie */
    snprintf(nline, 256,
      "Set-Cookie: OLD_PREF=3d141414bf4209321; "
      "expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com");
    res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
    if (res != CURLE_OK) {
      fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res));
      return 1;            
    }

    print_cookies(curl);

    res = curl_easy_perform(curl);
    if (res != CURLE_OK) {
      fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
      return 1;
    }
  }
  else {
    fprintf(stderr, "Curl init failed!\n");
    return 1;
  }

  curl_global_cleanup();
  return 0;
}
+2 −1
Original line number Diff line number Diff line
@@ -20,7 +20,8 @@ PROGRAMS = fopen.exe ftpget.exe ftpgetresp.exe ftpupload.exe \
            multi-double.exe multi-post.exe multi-single.exe \
            persistant.exe post-callback.exe postit2.exe \
            sepheaders.exe simple.exe simplessl.exe https.exe \
            ftp3rdparty.exe getinfo.exe anyauthput.exe
            ftp3rdparty.exe getinfo.exe anyauthput.exe \
            cookie_interface.exe

all: $(PROGRAMS)

Loading