如何通过GET和httr正确使用具有相同结构的两个cookie?

问题描述

我有一个看似简单的案例,我需要从一个地址下载 2 个 cookie 并使用它们来查询一个地址。我使用 httr 执行此操作,因为我需要 auth 才能下载 cookie,但我无法在第二个查询中正确使用 set_cookies。我尝试时总是收到 401 Unauthorized Access 响应。

我正在使用此代码获取 cookie:

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 响应和我的内容。