如何用R语言通过认证获取DraftKings的API响应?
问题:编程实现DraftKings登录并获取API响应
在浏览器中,登录https://myaccount.draftkings.com/login后,打开https://api.draftkings.com/scores/v1/leaderboards/9000?format=json&embed=leaderboard可查看API响应,需要通过编程实现这一流程。
此前曾用一个Python包完成该操作,但目前已失效,该包通过向登录API端点发送POST请求完成认证并保存Cookie供后续使用。
过往尝试及遇到的问题
1. 使用httr2发送POST登录请求
尝试向登录API发送POST请求,代码如下:
req <- httr2::request("https://api.draftkings.com/users/v3/providers/draftkings/logins?format=json") %>% httr2::req_method("POST") %>% httr2::req_headers( "Contest-Type" = "application/json", "Accept" = "*/*", "Accept-Encoding" = "gzip, deflate, br" ) %>% httr2::req_body_json( list( "login" = "email", "password" = "password", "host" = "api.draftkings.com", "challengeResponse" = list("solution" = "", "type" = "Recaptcha") ) ) req %>% httr2::req_perform()
执行后收到403错误。
2. 使用rvest模拟表单登录
尝试用rvest模拟登录表单提交,代码如下:
library(rvest) url <- "myaccount.draftkings.com/login" session <- session(url) form <- session %>% html_form() %>% magrittr::extract2(1) form$action <- url filled_form <- form %>% html_form_set(!!! list(EmailOrUsername = "user", Password = 'password')) html_form_submit(filled_form, submit = 3) session_jump_to(session, "https://www.draftkings.com/lobby")
未达到预期效果,且表单的action元素为空,手动设置后仍无法成功登录。
3. 使用浏览器Cookie通过httr发送GET请求
从已登录的浏览器会话中导出Cookie,用httr发送请求,代码如下:
cook <- jsonlite::read_json("cookies.json") clean_cook <- unlist(lapply(cook, function(x) {stats::setNames(x$value, x$name)})) resp <- httr::GET( "https://api.draftkings.com/scores/v1/leaderboards/9000?format=json&embed=leaderboard", httr::set_cookies(.cookies = clean_cook) ) httr::content(resp)
返回400错误,提示“Invalid userKey”,与清理浏览器缓存后访问该API链接的错误一致。
可行方案(更新)
通过httr2直接传递从浏览器导出的Cookie字符串,可成功获取API响应,代码如下:
cook <- jsonlite::read_json("cookies.json") clean_cook <- paste0(unlist(lapply(cook, function(x) {paste0(x$name, "=", x$value)})), collapse = ";") req <- httr2::request( "https://api.draftkings.com/scores/v1/leaderboards/9000?format=json&embed=leaderboard" ) req <- httr2::req_headers(req, "cookie" = clean_cook) resp <- httr2::req_perform(req) str(httr2::resp_body_json(resp))
但目前仍存在疑问:httr::set_cookies()无法正常工作,使用httr::add_headers传递Cookie也无法稳定成功。
内容的提问来源于stack exchange,提问作者Giovanni Colitti
相关产品推荐
相关产品推荐

