如何在R中的POST请求中设置内容类型?

时间:2013-10-03 08:22:08

标签: r web-services curl rcurl

我必须发帖子。问题是,将它的API作为web服务公开的应用程序已将其Content-Type设置为“text / plain”。我尝试了RCurl包和httpRequest包,但无法弄清楚如何设置内容类型。我试图直接对没有该内容类型的URL进行postrequest,然后postForm工作。这里有什么帮助吗?

编辑:我会尝试解释我在这里需要做什么。我有一个网址。我需要通过传递一些类似

的参数来向它发出POST请求
POST to "url/agents/where/agent?="Smith"

如果您使用chrome上的REST控制台扩展来进行Web服务调用,那么您可以键入此内容。我需要通过将content-type设置为“text / plain”

来从R中创建它

我试过的是这个,

postForm("url/agents/get/all")

这就像魅力一样,在我们的例子中,调用所有代理的webservice调用不要求内容类型为“text / plain”,也不需要将任何参数传递给它(例如。没有特定的代理商名称,因为我想要所有这些名称)。我想我已经想出如何通过将列表中的名称值对赋给.opts来传递参数。我无法弄清楚的是如何设置内容类型。

我试过了,但失败了,

postForm("url/agents/where",
         .opts = list(postfields = toJSON(list("name" = "Smith")),
         httpheader = c('Content-Type' = 'text/plain', ssl.verifypeer = FALSE)))

1 个答案:

答案 0 :(得分:3)

拥有您尝试过的代码会很有帮助,但一般的答案是您可以在httpheader curlPerform参数中指定它。这是the documentation的略微修改版本:

h <- basicTextGatherer()
h$reset()
curlPerform(url,
            httpheader=c('Content-Type' = "text/plain"),
            postfields=toJSON(list("name" = "Smith")),
            customrequest = 'POST', 
            writefunction = h$update,
            verbose = TRUE,
            ssl.verifypeer = FALSE)
body <- h$value()