Передача правильных параметров в RCurl/postForm

Я пытаюсь загрузить PDF-файл из Национального информационного центра через RCurl, но у меня возникли проблемы. Для этого примера URL я хочу, чтобы PDF-файл соответствовал к настройкам по умолчанию, за исключением «Формат отчета», который должен быть «PDF». Когда я запускаю следующий сценарий, он сохраняет файл, связанный с выбором других кнопок («Родитель(и) ...»/HMDA — не по умолчанию). Я попытался добавить эти элементы ввода в params, но это ничего не изменило. Может ли кто-нибудь помочь мне определить проблему? Благодарю.

library(RCurl)
curl = getCurlHandle()
curlSetOpt(cookiejar = 'cookies.txt', curl = curl)
params = list(rbRptFormatPDF = 'rbRptFormatPDF')

url = 'https://www.ffiec.gov/nicpubweb/nicweb/OrgHierarchySearchForm.aspx?parID_RSSD=2162966&parDT_END=99991231'
html = getURL(url, curl = curl)
viewstate = sub('.*id="__VIEWSTATE" value="([0-9a-zA-Z+/=]*).*', '\\1', html)
event = sub('.*id="__EVENTVALIDATION" value="([0-9a-zA-Z+/=]*).*', '\\1', html)
params[['__VIEWSTATE']] = viewstate
params[['__EVENTVALIDATION']] = event
params[['btnSubmit']] = 'Submit'
result = postForm(url, .params=params, curl=curl, style='POST')

writeBin( as.vector(result), 'test.pdf')

person sirallen    schedule 28.12.2016    source источник


Ответы (1)


Обеспечивает ли это правильный PDF?

library(httr)
library(rvest)
library(purrr)

# setup inane sharepoint viewstate parameters
res <- GET(url = "https://www.ffiec.gov/nicpubweb/nicweb/OrgHierarchySearchForm.aspx",
           query=list(parID_RSSD=2162966, parDT_END=99991231))

# extract them
pg <- content(res, as="parsed")
hidden <- html_nodes(pg, xpath=".//form/input[@type='hidden']") 
params <- setNames(as.list(xml_attr(hidden, "value")), xml_attr(hidden, "name"))

# pile on more params
params <- c(
  params, 
  grpInstitution = "rbCurInst", 
  lbTopHolders = "2961897", 
  grpHMDA = "rbNonHMDA", 
  lbTypeOfInstitution = "-99", 
  txtAsOfDate = "12/28/2016", 
  txtAsOfDateErrMsg = "", 
  lbHMDAYear = "2015", 
  grpRptFormat = "rbRptFormatPDF", 
  btnSubmit = "Submit"
)

# submit the req and save to disk
POST(url = "https://www.ffiec.gov/nicpubweb/nicweb/OrgHierarchySearchForm.aspx",
     query=list(parID_RSSD=2162966, parDT_END=99991231),
     add_headers(Origin = "https://www.ffiec.gov"), 
     body = params, 
     encode = "form", 
     write_disk("/tmp/output.pdf")) -> res2
person hrbrmstr    schedule 28.12.2016
comment
Да, это работает - спасибо! Я думаю, вам действительно нужно явно указать все параметры, даже если они отображаются по умолчанию. - person sirallen; 29.12.2016
comment
Кажется, lbTopHolders и lbHMDAyear не нужны - person sirallen; 29.12.2016
comment
скрытые API действительно ужасны ;-) - person hrbrmstr; 29.12.2016