Hello.
I know that it's usually possible to write cookies to a cookie
file by removing the curl handle and doing a gc() call. I can do
this with getURL(), but I just can't obtain the same results with
postForm().
If I use:
curlHandle - getCurlHandle(cookiefile=FILE, cookiejar=FILE)
and then do:
getURL(http://example.com/script.cgi, curl=curlHandle)
rm(curlHandle)
gc()
it's OK, the cookie is there. But, if I do (same handle; the
parameter is a dummy):
postForm(site, .params=list(par=cookie), curl=curlHandle,
style=POST)
rm(curlHandle)
gc()
no cookie is written.
Probably I'm doing something wrong, but don't know what.
Is it possible to store cookies read from the output of a
postForm() call? How?
Thanks.
Christian
PS.: I'm attaching a script that can be sourced (and its .txt
version). It contains an example. The expected result is a file
(cookies.txt) with two cookies. The script currently uses
getURL() and two cookies are stored. If postForm() is used
(currently commented), only 1 cookie is written.
--
SDF Public Access UNIX System - http://sdf.lonestar.org
# The script will call no_cookie() if no cookies file exists.
# It will then read the cookie XXX (its value is cookie1).
# When XXX has been read, it will be written to c_file with
# rm(curlHandle) ; gc(). Finally the script will test whether
# cookie ZZZ (its value is cookie2) exists. If it doesn't,
# then the script will retrive the same URL as before, which
# will reply with ZZZ if XXX was sent.
#
# If XXX and ZZZ are in cookies.txt, this should be removed
# to test again (otherwise the script will find both cookies
# and won't do anything).
library(RCurl)
site - http://chr.tx0.org/arch/ml/r/cookie-20101114.cgi;
c_file - cookies.txt
no_cookie - function() {
curlHandle - getCurlHandle(cookiefile=c_file, cookiejar=c_file)
getURL(site, curl=curlHandle)
rm(curlHandle)
gc()
}
if ( file.exists(c_file) == FALSE ) {
file.create(c_file)
no_cookie()
}
cookie_1 - sub(.*(XXX)\t, , grep(XXX,readLines(c_file),value=T))
if ( length(grep(ZZZ,readLines(c_file))) == 0 ) {
curlHandle - getCurlHandle(cookiefile=c_file, cookiejar=c_file)
# Either getURL OR postForm:
aaa - getURL(site, curl=curlHandle)
#aaa - postForm(site, .params=list(par=cookie_1), curl=curlHandle,
style=POST)
# Debug POST:
#d = debugGatherer()
#postForm(site, .params=list(par=cookie_1), .opts=list(httpheader = c(
# header = foo: bar), debugfunction = d$update, verbose=T),
# curl=curlHandle, style=POST)
#write.table(d$value()[[headerIn]], file=debug_in.txt)
#write.table(d$value()[[headerOut]], file=debug_out.txt)
rm(curlHandle)
gc()
}
# The script will call no_cookie() if no cookies file exists.
# It will then read the cookie XXX (its value is cookie1).
# When XXX has been read, it will be written to c_file with
# rm(curlHandle) ; gc(). Finally the script will test whether
# cookie ZZZ (its value is cookie2) exists. If it doesn't,
# then the script will retrive the same URL as before, which
# will reply with ZZZ if XXX was sent.
#
# If XXX and ZZZ are in cookies.txt, this should be removed
# to test again (otherwise the script will find both cookies
# and won't do anything).
library(RCurl)
site - http://chr.tx0.org/arch/ml/r/cookie-20101114.cgi;
c_file - cookies.txt
no_cookie - function() {
curlHandle - getCurlHandle(cookiefile=c_file, cookiejar=c_file)
getURL(site, curl=curlHandle)
rm(curlHandle)
gc()
}
if ( file.exists(c_file) == FALSE ) {
file.create(c_file)
no_cookie()
}
cookie_1 - sub(.*(XXX)\t, , grep(XXX,readLines(c_file),value=T))
if ( length(grep(ZZZ,readLines(c_file))) == 0 ) {
curlHandle - getCurlHandle(cookiefile=c_file, cookiejar=c_file)
# Either getURL OR postForm:
aaa - getURL(site, curl=curlHandle)
#aaa - postForm(site, .params=list(par=cookie_1), curl=curlHandle,
style=POST)
# Debug POST:
#d = debugGatherer()
#postForm(site, .params=list(par=cookie_1), .opts=list(httpheader = c(
# header = foo: bar), debugfunction = d$update, verbose=T),
# curl=curlHandle, style=POST)
#write.table(d$value()[[headerIn]], file=debug_in.txt)
#write.table(d$value()[[headerOut]], file=debug_out.txt)
rm(curlHandle)
gc()
}
__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.