¿Cómo puedo PUBLICAR un formulario HTML simple en R?

Soy relativamente nuevo en la progtwigción de R y estoy tratando de poner en práctica algunas de las cosas que estoy aprendiendo en el tema de Ciencia de Datos de Johns Hopkins. Específicamente, me gustaría automatizar el proceso de descarga de precios de bonos históricos del sitio web del Departamento del Tesoro de EE. UU.

Usando tanto Firefox como R, pude determinar que el sitio web del Departamento del Tesoro usa un formulario HTML POST muy simple para especificar una fecha única para las cotizaciones de interés. Luego devuelve una tabla de información del mercado secundario para todos los bonos pendientes.

Intenté sin éxito utilizar dos paquetes R diferentes para enviar una solicitud al servidor web del Tesoro de EE. UU. Hare son los dos enfoques que probé:

Intento # 1 (usando RCurl):

url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm" td.html <- postForm(url, submit = "Show Prices", priceDate.year = 2014, priceDate.month = 12, priceDate.day = 15, .opts = curlOptions(ssl.verifypeer = FALSE)) 

Esto da como resultado que una página web se devuelva y se almacene en td.html pero todo lo que contiene es un mensaje de error del servidor de treasurydirect. Sé que el servidor funciona porque cuando envío la misma solicitud a través de mi navegador, obtengo los resultados esperados.

Intento # 2 (usando rvest):

 s <- html_session(url) f0 <- html_form(s) f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15) test <- submit_form(s, f1) 

Desafortunadamente, este enfoque ni siquiera deja R y da como resultado el siguiente mensaje de error de R:

 Submitting with 'submit' Error in function (type, msg, asError = TRUE) :  malformed 

Parece que no puedo encontrar la manera de ver qué texto “mal formado” se envía a revertir para poder intentar diagnosticar el problema.

¡Cualquier sugerencia o consejo para resolver esta tarea aparentemente simple sería muy apreciada!

Bueno, parece que funciona con la biblioteca httr .

 library(httr) url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm" fd <- list( submit = "Show Prices", priceDate.year = 2014, priceDate.month = 12, priceDate.day = 15 ) resp<-POST(url, body=fd, encode="form") content(resp) 

La biblioteca de rvest es realmente solo un contenedor para httr . Parece que no hace un buen trabajo al interpretar URL absolutas sin el nombre del servidor. Entonces si miran

 f1$url # [1] /GA-FI/FedInvest/selectSecurityPriceDate.htm 

ves que solo tiene la ruta y no el nombre del servidor. Esto parece ser confuso httr . Si lo haces

 f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15) f1$url <- url test <- submit_form(s, f1) 

eso parece funcionar Tal vez es un gran tema que se debe informar para rvest . (Probado en rvest_0.1.0 )

Sé que esta es una vieja pregunta, pero agregando el

 style='POST' 

el parámetro para postForm también funciona.