【问题标题】:RCurl getForm pass http headersRCurl getForm 传递 http 标头
【发布时间】:2013-11-18 15:17:52
【问题描述】:

使用 RCurl 的 getForm 函数,这是传入 GET 参数的唯一好方法,我需要更改一些 http 标头。在 getURI 中,您只需传递 httpheader = c(Whatever='whatever',...) 即可。不幸的是,getForm 似乎忽略了这个论点。

如何在 getForm 请求中设置 http 标头?

【问题讨论】:

    标签: r http curl get rcurl


    【解决方案1】:

    欢迎来到 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 而不是任何包装函数(如getFormgetURL),因为这样您将始终使用一致的语法。

    【讨论】:

    • 嗯,我将... 用作 GET 参数,而不是标头(如 Accept='application/json')。我只是使用 curlPerform,但我试图避免自己构造一个 URI。
    • 很遗憾,尝试getForm(my_uri, Accept='application/json',.params=c(...),curl=ch) 没有成功。
    • 我相信您只能将标头指定为... 或使用.params,但不能同时使用这两种方法,您在该调用中似乎正在这样做。
    • 呵呵,要设置.opts = list(httpheader = c(yourheadershere...)
    猜你喜欢
    • 2016-02-16
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多