【发布时间】:2013-11-18 15:17:52
【问题描述】:
使用 RCurl 的 getForm 函数,这是传入 GET 参数的唯一好方法,我需要更改一些 http 标头。在 getURI 中,您只需传递 httpheader = c(Whatever='whatever',...) 即可。不幸的是,getForm 似乎忽略了这个论点。
如何在 getForm 请求中设置 http 标头?
【问题讨论】:
使用 RCurl 的 getForm 函数,这是传入 GET 参数的唯一好方法,我需要更改一些 http 标头。在 getURI 中,您只需传递 httpheader = c(Whatever='whatever',...) 即可。不幸的是,getForm 似乎忽略了这个论点。
如何在 getForm 请求中设置 http 标头?
【问题讨论】:
欢迎来到 RCurl 的混乱世界!你发现它的语法没有意义,这不是你的错。
在getForm 中,您将标头作为第二个参数(...)传递。请参阅? getForm 的用法部分:
getForm(uri, ..., .params = character(), .opts = list(), curl = getCurlHandle(),
.encoding = integer(), binary = NA, .checkParams = TRUE)
参数部分说:
...参数的名称-值对。请注意,这些不是 CURL 选项。
相比之下,另一个主力函数getURL 说:
getURL(url, ..., .opts = list(),
write = basicTextGatherer(.mapUnicode = .mapUnicode),
curl = getCurlHandle(), async = length(url) > 1,
.encoding = integer(), .mapUnicode = TRUE)
...被解释为控制 HTTP 请求的 CURL 选项的命名值。
因此,当使用getForm 时,您可以将标头作为列表传递,但是当使用getURL 时,您需要在httpheader 参数中指定它们。
因此,我的一般建议是始终使用curlPerform 而不是任何包装函数(如getForm 或getURL),因为这样您将始终使用一致的语法。
【讨论】:
... 用作 GET 参数,而不是标头(如 Accept='application/json')。我只是使用 curlPerform,但我试图避免自己构造一个 URI。
getForm(my_uri, Accept='application/json',.params=c(...),curl=ch) 没有成功。
... 或使用.params,但不能同时使用这两种方法,您在该调用中似乎正在这样做。
.opts = list(httpheader = c(yourheadershere...)