mirror of https://github.com/moparisthebest/curl
Make the COOKIESESSION work better by creating a list of cookie files files
when given in the curl_easy_setopt() and then parse them all on the first curl_easy_perform() call instead.
This commit is contained in:
parent
b1ffb79a50
commit
156aad198f
|
@ -1195,6 +1195,22 @@ CURLcode Curl_pretransfer(struct SessionHandle *data)
|
||||||
data->state.this_is_a_follow = FALSE; /* reset this */
|
data->state.this_is_a_follow = FALSE; /* reset this */
|
||||||
data->state.errorbuf = FALSE; /* no error has occurred */
|
data->state.errorbuf = FALSE; /* no error has occurred */
|
||||||
|
|
||||||
|
/* If there was a list of cookie files to read and we haven't done it before,
|
||||||
|
do it now! */
|
||||||
|
if(data->change.cookielist) {
|
||||||
|
struct curl_slist *list = data->change.cookielist;
|
||||||
|
while(list) {
|
||||||
|
data->cookies = Curl_cookie_init(list->data,
|
||||||
|
data->cookies,
|
||||||
|
data->set.cookiesession);
|
||||||
|
list = list->next;
|
||||||
|
}
|
||||||
|
curl_slist_free_all(data->change.cookielist); /* clean up list */
|
||||||
|
data->change.cookielist = NULL; /* don't do this again! */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Allow data->set.use_port to set which port to use. This needs to be
|
/* Allow data->set.use_port to set which port to use. This needs to be
|
||||||
* disabled for example when we follow Location: headers to URLs using
|
* disabled for example when we follow Location: headers to URLs using
|
||||||
* different ports! */
|
* different ports! */
|
||||||
|
|
|
@ -183,6 +183,9 @@ CURLcode Curl_close(struct SessionHandle *data)
|
||||||
if (data->share)
|
if (data->share)
|
||||||
data->share->dirty--;
|
data->share->dirty--;
|
||||||
|
|
||||||
|
if(data->change.cookielist) /* clean up list if any */
|
||||||
|
curl_slist_free_all(data->change.cookielist);
|
||||||
|
|
||||||
if(data->state.auth_host)
|
if(data->state.auth_host)
|
||||||
free(data->state.auth_host);
|
free(data->state.auth_host);
|
||||||
|
|
||||||
|
@ -552,8 +555,10 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...)
|
||||||
*/
|
*/
|
||||||
cookiefile = (char *)va_arg(param, void *);
|
cookiefile = (char *)va_arg(param, void *);
|
||||||
if(cookiefile)
|
if(cookiefile)
|
||||||
data->cookies = Curl_cookie_init(cookiefile, data->cookies,
|
/* append the cookie file name to the list of file names, and deal with
|
||||||
data->set.cookiesession);
|
them later */
|
||||||
|
data->change.cookielist =
|
||||||
|
curl_slist_append(data->change.cookielist, cookiefile);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CURLOPT_COOKIEJAR:
|
case CURLOPT_COOKIEJAR:
|
||||||
|
|
|
@ -582,6 +582,8 @@ struct DynamicStatic {
|
||||||
bool proxy_alloc; /* http proxy string is malloc()'ed */
|
bool proxy_alloc; /* http proxy string is malloc()'ed */
|
||||||
char *referer; /* referer string */
|
char *referer; /* referer string */
|
||||||
bool referer_alloc; /* referer sting is malloc()ed */
|
bool referer_alloc; /* referer sting is malloc()ed */
|
||||||
|
struct curl_slist *cookielist; /* list of cookie files set by
|
||||||
|
curl_easy_setopt(COOKIEFILE) calls */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue