问题描述
我有一个看似简单的案例,我需要从一个地址下载 2 个 cookie 并使用它们来查询另一个地址。我使用 httr 执行此操作,因为我需要 auth 才能下载 cookie,但我无法在第二个查询中正确使用 set_cookies。我尝试时总是收到 401 Unauthorized Access 响应。
library(httr)
r <- GET("https://example.com/sso",authenticate("user","pass"))
然后我可以查找它们,它们的结构如下:
cookies(r)
domain flag path secure expiration name
1 .example.com TRUE / FALSE 2021-01-20 15:04:34 Cookie
2 .example.com TRUE / FALSE 2021-01-20 15:04:34 CookieExp
value
1 abc1=
2 Wed,20 Jan 2021 14:04:34 GMT
但是,现在当我想使用它们查询其他地址并使用 cookie 进行登录时,我得到了 401:
md <- GET("https://example.com/api",set_cookies(cookies(r)))
> md
Response [https://example.com/api]
Date: 2021-01-19 14:41
Status: 401
我的猜测是我需要重新格式化 cookie,但我只能找到有关如何使用一个 cookie 执行此操作的文档,而我需要 2 个具有相同名称的。任何帮助将不胜感激,因为我被卡住了。谢谢!
解决方法
我终于明白了。 cookie 数据框中唯一需要的数据是名称和值列,而其余的列可以丢弃。所以如果我打电话给:
md <- GET("https://example.com/api",set_cookies("Cookie"=cookies(r)$value[1],"CookieExp"=cookies(r)$value[2]))
然后它按预期工作,我得到 200 响应和我的内容。