【问题标题】:How to remove cookies preserved by httr::GET?如何删除由 httr::GET 保存的 cookie?
【发布时间】:2016-10-11 14:18:27
【问题描述】:

httr::GET 在向同一网站发出请求时保留 cookie。

  1. 是否可以查询那些保留的 cookie?
  2. 如何刷新那些保留的 cookie 并再次发出“原始”请求?

例子:

# Get login cookie
r1 <- GET("https://some.url/login", authenticate("foo", "bar"))

cookies(r1)
# returns a data frame of two cookies

# Make request that requires authentication cookie
# Only succeeds if r1 was made
r2 <- GET("https://some.url/data/?query&subset=1")
r2

请注意,在制作r2 时,您不必明确传递任何 cookie 信息,因为它们会自动存储在某处。

我想知道如何查询或删除这些存储的 cookie?

【问题讨论】:

  • 我不确定是否要清除现有的 cookie,但请参阅?httr::cookies 中的示例以查询它们。
  • 谢谢@nrussell cookies() 不是我的意思。但我添加了一个例子来澄清事情。

标签: r httr


【解决方案1】:

使用新句柄进行请求。

h1 <- handle('')
r1 <- GET("https://some.url/login", handle=h1, authenticate("foo", "bar"))

h2 <- handle('')
r2 <- GET("https://some.url/data/?query&subset=1", handle=h2)

【讨论】:

  • 谢谢!这解决了(2)。您对如何处理 (1) 有任何想法吗?
  • cookies(r1) 不返回保留的 cookie 吗?
  • 但是在制作r2时会用到它们吗?我不明白它是如何工作的。
  • 当您将新句柄传递给请求时,它是原始请求。您可以致电cookies(r1)cookies(r2) 来查看存储了哪些cookie。
【解决方案2】:

一种(非常迂回的)方法是“重置”包:

detach("package:httr", unload=TRUE)
library(httr)

我仍在寻找更好的东西。

【讨论】:

  • 是的......这很直率。如果您需要根据 httr 加载其他包,也会有问题。
  • 我很想看看你是否想出了一些东西,我仍在尝试为自己解决一些问题...我尝试查看 httr 的全局设置,但到目前为止没有运气
【解决方案3】:

这对我有用:

# Get login cookie
r1 <- GET("https://some.url/login", authenticate("foo", "bar"))

cookies(r1)
# The cookies should be there, then:
handle_reset("https://some.url")
cookies(r1)
#now the cookies should be removed

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2011-01-09
    • 2015-02-24
    相关资源
    最近更新 更多