使用 httr GET 时不考虑 If-Modified-Since?

Posted

技术标签:

【中文标题】使用 httr GET 时不考虑 If-Modified-Since?【英文标题】:If-Modified-Since not considered while using httr GET? 【发布时间】:2017-01-17 05:37:28 【问题描述】:

我的要求/目标:

我正在从公共页面检索过去 3 个月的 Facebook 帖子,我想只选择最近(过去 2 天)修改过的帖子。

我正在使用 httr R 包,并使用 GET 函数来完成上述操作。

我尝试了以下方法:

    url.data

    url.data

在上面的 'url' 中有 'since', 'until' 字段指定时间 需要检索帖子的期限(3个月)。 'token' 是用于身份验证的 OAuth 令牌。

以上两种方法都是检索所有帖子,而不是仅检索过去2天修改过的帖子。

是否有另一种将 If-Modified-Since 传递给 GET 的方法,这将导致仅检索所需的帖子?

注意:我已经查看了这些与 If-Modified-Since 相关的帖子,但它们没有回答我的问题:

    "If-Modified-Since" header "If-Modified-Since" Header? If modified since - HTTP protocol If-Modified-Since Date Format

还有一些与我的场景不完全相关的问题。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我认为您的问题的核心是“If-Modified-Since”标头的目的与 Facebook 过滤结果之间的混淆。

“If-Modified-Since”询问服务器“当我调用此 URL/使此查询自此日期/时间起更改时要返回的内容吗?”

发送到 Facebook 的“since”和“until”参数过滤请求以仅显示在这两个日期之间发布的内容。

Facebook 不会将两者合并以返回满足这两个问题的帖子 - 这些问题位于参数中设置的两个日期/时间之间,并且自“If-Modified-Since”设置的日期/时间以来已被修改。

这是因为 Facebook 执行搜索/过滤,查看整个响应并回答“当我调用此 URL/使此查询自此日期/时间以来要返回的内容是否发生更改?”这一问题。基于整个响应。如果整个响应中有任何变化,那么它会将整个响应发送给您。

如果您想识别已更改的单个帖子,则必须遍历数组并单独检查每个元素。

【讨论】:

以上是关于使用 httr GET 时不考虑 If-Modified-Since?的主要内容,如果未能解决你的问题,请参考以下文章

HTTR 包:SSL 证书错误,SSL3_GET_SERVER_CERTIFICATE

使用 httr get 时出现错误 401

httr 有时会在 URL 中将“%”替换为“%25”

R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)

使用 httr 发布请求

从R中的url获取重定向的数量