Annotation of embedaddon/curl/docs/examples/cookie_interface.c, revision 1.1.1.1

1.1       misho       1: /***************************************************************************
                      2:  *                                  _   _ ____  _
                      3:  *  Project                     ___| | | |  _ \| |
                      4:  *                             / __| | | | |_) | |
                      5:  *                            | (__| |_| |  _ <| |___
                      6:  *                             \___|\___/|_| \_\_____|
                      7:  *
                      8:  * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
                      9:  *
                     10:  * This software is licensed as described in the file COPYING, which
                     11:  * you should have received as part of this distribution. The terms
                     12:  * are also available at https://curl.haxx.se/docs/copyright.html.
                     13:  *
                     14:  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
                     15:  * copies of the Software, and permit persons to whom the Software is
                     16:  * furnished to do so, under the terms of the COPYING file.
                     17:  *
                     18:  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
                     19:  * KIND, either express or implied.
                     20:  *
                     21:  ***************************************************************************/
                     22: /* <DESC>
                     23:  * Import and export cookies with COOKIELIST.
                     24:  * </DESC>
                     25:  */
                     26: 
                     27: #include <stdio.h>
                     28: #include <string.h>
                     29: #include <stdlib.h>
                     30: #include <errno.h>
                     31: #include <time.h>
                     32: 
                     33: #include <curl/curl.h>
                     34: 
                     35: static void
                     36: print_cookies(CURL *curl)
                     37: {
                     38:   CURLcode res;
                     39:   struct curl_slist *cookies;
                     40:   struct curl_slist *nc;
                     41:   int i;
                     42: 
                     43:   printf("Cookies, curl knows:\n");
                     44:   res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
                     45:   if(res != CURLE_OK) {
                     46:     fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n",
                     47:             curl_easy_strerror(res));
                     48:     exit(1);
                     49:   }
                     50:   nc = cookies;
                     51:   i = 1;
                     52:   while(nc) {
                     53:     printf("[%d]: %s\n", i, nc->data);
                     54:     nc = nc->next;
                     55:     i++;
                     56:   }
                     57:   if(i == 1) {
                     58:     printf("(none)\n");
                     59:   }
                     60:   curl_slist_free_all(cookies);
                     61: }
                     62: 
                     63: int
                     64: main(void)
                     65: {
                     66:   CURL *curl;
                     67:   CURLcode res;
                     68: 
                     69:   curl_global_init(CURL_GLOBAL_ALL);
                     70:   curl = curl_easy_init();
                     71:   if(curl) {
                     72:     char nline[256];
                     73: 
                     74:     curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
                     75:     curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
                     76:     curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); /* start cookie engine */
                     77:     res = curl_easy_perform(curl);
                     78:     if(res != CURLE_OK) {
                     79:       fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
                     80:       return 1;
                     81:     }
                     82: 
                     83:     print_cookies(curl);
                     84: 
                     85:     printf("Erasing curl's knowledge of cookies!\n");
                     86:     curl_easy_setopt(curl, CURLOPT_COOKIELIST, "ALL");
                     87: 
                     88:     print_cookies(curl);
                     89: 
                     90:     printf("-----------------------------------------------\n"
                     91:            "Setting a cookie \"PREF\" via cookie interface:\n");
                     92: #ifdef WIN32
                     93: #define snprintf _snprintf
                     94: #endif
                     95:     /* Netscape format cookie */
                     96:     snprintf(nline, sizeof(nline), "%s\t%s\t%s\t%s\t%lu\t%s\t%s",
                     97:              ".example.com", "TRUE", "/", "FALSE",
                     98:              (unsigned long)time(NULL) + 31337UL,
                     99:              "PREF", "hello example, i like you very much!");
                    100:     res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
                    101:     if(res != CURLE_OK) {
                    102:       fprintf(stderr, "Curl curl_easy_setopt failed: %s\n",
                    103:               curl_easy_strerror(res));
                    104:       return 1;
                    105:     }
                    106: 
                    107:     /* HTTP-header style cookie. If you use the Set-Cookie format and don't
                    108:     specify a domain then the cookie is sent for any domain and will not be
                    109:     modified, likely not what you intended. Starting in 7.43.0 any-domain
                    110:     cookies will not be exported either. For more information refer to the
                    111:     CURLOPT_COOKIELIST documentation.
                    112:     */
                    113:     snprintf(nline, sizeof(nline),
                    114:       "Set-Cookie: OLD_PREF=3d141414bf4209321; "
                    115:       "expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.example.com");
                    116:     res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
                    117:     if(res != CURLE_OK) {
                    118:       fprintf(stderr, "Curl curl_easy_setopt failed: %s\n",
                    119:               curl_easy_strerror(res));
                    120:       return 1;
                    121:     }
                    122: 
                    123:     print_cookies(curl);
                    124: 
                    125:     res = curl_easy_perform(curl);
                    126:     if(res != CURLE_OK) {
                    127:       fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
                    128:       return 1;
                    129:     }
                    130: 
                    131:     curl_easy_cleanup(curl);
                    132:   }
                    133:   else {
                    134:     fprintf(stderr, "Curl init failed!\n");
                    135:     return 1;
                    136:   }
                    137: 
                    138:   curl_global_cleanup();
                    139:   return 0;
                    140: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>