[R] RCurl: authentication when posting forms

EBo ebo at sandien.com
Fri Aug 29 16:01:49 CEST 2008


I do not know if this is related, but for some functions to work properly
cookies, java, and/or javaqscript need to be enabled.  Some of the current
pages do not check for requirements and warn, they just don't work properly.

Just a thought of something else to try...

  EBo --


Duncan Temple Lang <duncan at wald.ucdavis.edu> said:

> 
> --OXfL5xGRrasGEqWY
> Content-Type: text/plain; charset=us-ascii
> Content-Disposition: inline
> Content-Transfer-Encoding: quoted-printable
> 
> Valerie Obenchain wrote:
> > Duncan,
> >=20
> > Thank you for the examples.  I had tried all of these different options=
> =20
> > for authentication but had no luck. I was getting a "100 continue" and=20
> > then a "401 unauthorized" response.  This morning the owners of the=20
> > server I was trying to access discovered a bug with their api when using=
> =20
> > basic authorization. Evidently the code on their side was explicitly=20
> > checking that the request method was GET, hence why all of my POST=20
> > attempts were failing. They are in the process of fixing that code and=20
> > my guess is that when I am able to try again the RCurl post functions=20
> > will work just fine.
> 
> Thanks for the update.  Good to know that there isn't a problem
> with the libcurl/RCurl code.
> 
> >=20
> > I did have one other RCurl question I'd like to ask you about the=20
> > parseHTTPHeader function.
> >=20
> > The parser appears to parse on spaces, so when the error message is more=
> =20
> > than one word (eg, "not found"), the message returned is "not". I have=20
> > modified the parseHTTPHeader function so that it works for me. I may not=
> =20
> > have done this in the most efficient way but at least you can see what I=
> =20
> > was trying to do.
> 
> 
> Yes, this is a problem. Thanks for bringing it to my attention.
> I did get your mail directly to me from about 2 weeks ago=20
> and I replied. Perhaps my reply got eaten by your filters.
> In it, I said that it was a bug, and that it would be
> very useful if you could send me an RCurl command
> that illustrated the error so that I could add it to the RCurl
> tests.
> =20
> 
> The only modification that can make your patch slightly
> "better" is that the words in the statusMessage are essentially
> all the words in the status variable, less the first two
> (the status number and the protocol name). So
> 
>  header[["statusMessage"]] <- paste(els[-c(1,2)], collapse =3D " ")
> 
> is more convenient than
> 
>   hstring <- NULL
>   for(i in 3:length(els)) hstring <- paste(hstring," ",els[i],sep=3D"")
>   hstring <- substr(hstring,2,nchar(hstring))
>   header[["statusMessage"]] <- hstring
> 
> 
> If you do have a URL that I can use to test the error handling code, I'd ap=
> preciate
> if you could send it to me. =20
> 
> 
>  D.
> 
> >=20
> > Below I have pasted my modification for the parseHTTPHeader function=20
> > which I am calling parseHeader. Please let me know if you think this is=
> =20
> > a bug or if I am just using the function incorrectly.
> >=20
> > Thank you for the help.
> > Valerie
> >=20
> > #---------------------------------------------------
> > #Sample code:
> > reader <- basicTextGatherer()
> > header <- basicTextGatherer()
> > handle <- getCurlHandle()
> > myopts <- curlOptions(  netrc=3D1, httpheader=3Dc(Authorization=3Dmypwd,=
> =20
> > Accept=3D"test/xml",
> >                                       Accept=3D"multipart/*",=20
> > 'Content-Type'=3D"text/xml; charset=3Dutf-8"),
> >                                       postfields=3Dbody,=20
> > writefunction=3Dreader$update, headerfunction=3Dheader$update,
> >                                       ssl.verifyhost=3DFALSE,=20
> > ssl.verifypeer=3DFALSE, followlocation=3DTRUE)} else
> >=20
> > curlPerform(url=3DmyUrl, .opts=3Dmyopts, curl=3Dhandle)
> > h <- parseHeader(header$value())
> > status <- h$status
> > message <- h$statusMessage
> > #----------------------------------------------------
> >=20
> > #Modified parse function:
> > parseHeader <- function (lines)
> > {
> >   if (length(lines) < 1)
> >       return(NULL)
> >   if (length(lines) =3D=3D 1)
> >       lines =3D strsplit(lines, "\r\n")[[1]]
> >   status =3D lines[1]
> >   lines =3D lines[-c(1, length(lines))]
> >   lines =3D gsub("\r\n", "", lines)
> >   if (FALSE) {
> >       header =3D lines[-1]
> >       header <- read.dcf(textConnection(header))
> >   }
> >   else {
> >       els <- sapply(lines, function(x) strsplit(x, ":[ ]*"))
> >       header <- lapply(els, function(x) x[2])
> >       names(header) <- sapply(els, function(x) x[1])
> >   }
> >   els <- strsplit(status, " ")[[1]]
> >   header[["status"]] <- as.integer(els[2])
> > # new code below
> >   hstring <- NULL
> >   for(i in 3:length(els)) hstring <- paste(hstring," ",els[i],sep=3D"")
> >   hstring <- substr(hstring,2,nchar(hstring))
> >   header[["statusMessage"]] <- hstring
> >   header
> > }
> >=20
> >=20
> >=20
> >=20
> >=20
> >=20
> >=20
> >=20
> >=20
> >=20
> >=20
> >=20
> > Duncan Temple Lang wrote:
> > >
> > >
> > >Hi Valerie
> > >
> > >Valerie Obenchain wrote:
> > >>Hi,
> > >>
> > >>Has anyone successfully used RCurl for posting data to a=20
> > >>password-protected site?=20
> > >
> > >Yes. I just set up a sample form to test with and the following
> > >all work
> > >
> > >
> > ># Perl script (and HTML form for testing in the browser) taken from
> > >#   http://www.elated.com/articles/form-validation-with-perl-and-cgi/
> > >
> > >
> > ># Provide the login & password directly
> > >postForm("http://www.omegahat.org/RCurl/testPassword/form_validation.cgi=
> ",=20
> > >
> > >           your_name =3D "Duncan",
> > >           your_age =3D "35-55",
> > >           your_sex =3D "m",
> > >           submit =3D "submit",
> > >           .opts =3D list(userpwd =3D "bob:welcome"))
> > >
> > ># Get the login & password in ~/.netrc
> > >postForm("http://www.omegahat.org/RCurl/testPassword/form_validation.cgi=
> ",=20
> > >
> > >           your_name =3D "Duncan",
> > >           your_age =3D "35-55",
> > >           your_sex =3D "m",
> > >           submit =3D "submit",
> > >          .opts =3D list(netrc =3D TRUE))
> > >
> > ># Get the login & password from a different netrc file
> > >
> > >postForm("http://www.omegahat.org/RCurl/testPassword/form_validation.cgi=
> ",=20
> > >
> > >           your_name =3D "Duncan",
> > >           your_age =3D "35-55",
> > >           your_sex =3D "m",
> > >           submit =3D "submit",
> > >           .opts =3D list(netrc =3D TRUE,
> > >                        netrc.file =3D=20
> > >"/Users/duncan/Projects/org/omegahat/R/RCurl/inst/examples/omg.netrc"))
> > >
> > >
> > >So let me know what problems you are having and more details
> > >about the OS, version of libcurl, and a sample URL to which
> > >to post, etc.
> > >
> > >  D.
> > >
> > >>I
> > >>have tired using option netrc=3D1 with both postForm and curlPerform=20
> > >>(with postfields option) but can't authenticate.
> > >>I would happily provide more details if some one has had some=20
> > >>experience with this.
> > >>
> > >>Thanks very much.
> > >>Valerie
> > >>
> > >>______________________________________________
> > >>R-help at r-project.org mailing list
> > >>https://stat.ethz.ch/mailman/listinfo/r-help
> > >>PLEASE do read the posting guide=20
> > >>http://www.R-project.org/posting-guide.html
> > >>and provide commented, minimal, self-contained, reproducible code.
> 
> --=20
> "There are men who can think no deeper than a fact" - Voltaire
> 
> 
> Duncan Temple Lang                duncan at wald.ucdavis.edu
> Department of Statistics          work:  (530) 752-4782
> 4210 Mathematical Sciences Bldg.  fax:   (530) 752-7099
> One Shields Ave.
> University of California at Davis
> Davis, CA 95616, USA
> 
> 
> 
> 
> --OXfL5xGRrasGEqWY
> Content-Type: application/pgp-signature
> Content-Disposition: inline
> 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.1 (GNU/Linux)
> 
> iD8DBQFIt0WM9p/Jzwa2QP4RAv4nAJwNoije2wpiktehy63Jmt2itAjufACeP3nv
> O+p0qeMpEUGI5gXNT1R0Mzg=
> =4OsO
> -----END PGP SIGNATURE-----
> 
> --OXfL5xGRrasGEqWY--
> 
> 



--



More information about the R-help mailing list