咨询:rvest包中rvest:::request_POST弃用后的POST请求处理方案
替代已弃用的rvest:::request_POST的方案
rvest的内部函数rvest:::request_POST属于未公开API,被弃用后无法正常使用,以下是两种可复用已有rvest会话状态的替代方案:
方案1:用rvest会话对象的request()方法(优先推荐)
这是官方设计的标准化请求方式,会自动继承会话的Cookie、请求头等状态,用法逻辑和原函数一致:
library(rvest) # 假设你已初始化好会话对象my_session # my_session <- session("https://your-target-site.com") # 构造POST请求参数,根据接口要求调整 post_data <- list( key1 = "value1", key2 = "value2" ) # 执行POST请求 resp <- my_session$request( method = "POST", url = "https://your-target-site.com/api/endpoint", body = post_data, encode = "form" # 接口为JSON则改为"json",文件上传用"multipart" ) # 解析响应(示例) result <- resp %>% html_element(".result-content") %>% html_text()
方案2:结合httr2实现灵活请求控制
如果需要更精细的配置(比如自定义超时、代理),可提取rvest会话状态后用httr2发送请求:
library(rvest) library(httr2) my_session <- session("https://your-target-site.com") # 基于会话状态构造httr2请求 req <- request("https://your-target-site.com/api/endpoint") %>% req_method("POST") %>% req_body_form(key1 = "value1", key2 = "value2") # JSON格式用req_body_json() req_headers(!!!my_session$response$headers) %>% # 继承会话请求头 req_cookies(!!!my_session$cookies) # 继承会话Cookie # 发送请求并处理响应 resp <- req_perform(req) result <- resp %>% resp_body_html() %>% html_element(".result-content") %>% html_text()
重要提醒
- 永远不要依赖rvest的内部函数(带
:::的),这类函数无官方维护承诺,随时可能被移除 - 优先选择方案1,完全贴合rvest会话机制,代码更简洁
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

