You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用httr::GET请求Oddsportal数据的编码解码问题求助

解决提示

1. 补全Base64/Base64URL的填充字符

Base64和Base64URL编码要求字符串长度为4的倍数,缺失的部分需要用=补全。先检查返回字符串的长度,计算需补充的=数量:

  • 长度模4余1:补3个=
  • 长度模4余2:补2个=
  • 长度模4余3:补1个=

以你提供的示例字符串为例,长度为50,50%4=2,补2个=后得到完整串:

encoded_str <- "ZDRCVTcxaklMRU5DRHRyeXdPRzdUbnhsWm44MFpZTkVWaWI1am=="

2. 执行Base64URL转标准Base64并解码

如果是Base64URL编码,需先替换特殊字符再用标准Base64解码:

library(base64enc)

# 转换Base64URL到标准Base64格式
base64_str <- gsub("-", "+", gsub("_", "/", encoded_str))
# 解码为原始字节
decoded_raw <- base64decode(base64_str)
# 尝试转为文本
decoded_text <- rawToChar(decoded_raw)

3. 检查是否存在数据压缩

如果解码后仍是乱码,大概率数据被压缩(如gzip、deflate),尝试解压:

# 尝试gzip解压
tryCatch({
  decompressed <- memDecompress(decoded_raw, type = "gzip")
  cat(rawToChar(decompressed))
}, error = function(e) {
  # 尝试deflate解压
  tryCatch({
    decompressed <- memDecompress(decoded_raw, type = "deflate")
    cat(rawToChar(decompressed))
  }, error = function(e) {
    cat("解压失败,数据可能不是gzip/deflate压缩格式")
  })
})

4. 优化请求头参数

部分接口会根据请求头返回不同编码的数据,确保httr::GET模拟浏览器请求:

library(httr)

response <- GET(
  "你的目标Ajax URL",
  add_headers(
    "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Accept" = "application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding" = "gzip, deflate, br"
  )
)
# 用httr内置函数自动处理编码与解压
content(response, "text")

注意:httr::content会自动识别并处理压缩编码,优先使用该函数直接获取内容,比手动解码更可靠。

内容的提问来源于stack exchange,提问作者M.O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:23:11