CURL:发布数据到表单,点击提交将该表单传递给R(使用FastRWeb)

时间:2014-09-25 11:17:11

标签: r forms http post curl

我的问题如下。我有一个非常简单的网站,如下所示:

'在表格中输入文字。'

'点击提交 - 数据通过一个简单的RScript运行,并从另一个网页中的R输出到屏幕。'

如果我手动将数据输入网站,这可以正常工作,但我希望能够使用curl以编程方式执行此操作。页面的代码位于问题的底部。

我觉得这个问题可能有所帮助,但我无法看到如何将其与我想要做的事情联系起来...... Posting data to web forms using submit buttons from R但我不想做如果可以避免,可以使用R.

最终我希望能够从文件中检索数据来执行此操作,但如果我能使用从CURL输入的文本,我会感到高兴。

以下是我所做的尝试及其输出(据我所知,数据已正确上传但未存储在表格中以传递给textareascanner)。我以某种方式输入URL时是否应该指向表单?或者使用不同的http方法?谢谢你的帮助。

尝试从命令行使用数据输入:

> curl -X POST -v --data "MyText=123T&press=OK" http://ADDRESS/cgi-bin/R/mdmSubmit


> * upload completely sent off: 21 out of 21 bytes
> Error in (function ()  :   unused arguments (MyText = "123", press = "submit")

我尝试从文件中读取数据:

curl -X POST -v --form MyText=@C:\DATA\test.txt --form press=OK http://ADDRESS/cgi-bin/R/mdmFileSubmit

> POST /cgi-bin/R/mdmFileSubmit HTTP/1.1
> Content-Length: 293

Error in (function ()  :

  unused arguments (MyText = list(filename = "tester.txt", tempfile = "/tmp/Rtmp
4pk5LV/Multipart584b104386fb", content_type = "text/plain", head = "Content-Disp
osition: form-data; name=\"MyText\"; filename=\"tester.txt\"\r\nContent-Type: te
xt/plain"), press = "OK")

FastRWeb脚本:

run <- function() {
  out("<!doctype html><html lang='en'><head>",
      "<meta charset='UTF-8'/></head><body>",
      sep = "", eol = "")
  out("<form method='post' action='textareascanner' ",
      "enctype='multipart/form-data' name='form'>", sep = "", eol = "")
  out("<textarea name='MyText' rows=15 cols=80></textarea>")
  out("<br/><input type='submit' name='press' value='OK' /></form>")
  out("</body></html>")
  done()
}

它重定向到的页面:

run <- function(MyText) {
  # HTML
  out("<!doctype html><html lang='en'><head>",
      "<meta charset='UTF-8'/></head><body>", sep = "", eol = "")

  # Retrieve the data in a 'multipart/form-data' form
  if (grep("^multipart", request$c.type)) {
    pars <- parse.multipart()
  }

  # Scan the text
  try(fullText <- scan(textConnection(pars$MyText),character(0),sep="\n")) 

  # HTML output
  if (exists("fullText")) {
    oprint(fullText)
  } 

  out("</body></html>")
  done()
}

0 个答案:

没有答案