使用R的curl包转换OriginStamp接口POST cURL请求为R代码
R语言curl包实现JSON格式POST请求的方法
先修正现有代码的小问题
你之前写的请求头配置里,accept字段的值开头多了一个空格(写成了" application/json"),这类多余空格很容易触发服务端的请求头校验失败,需要删掉空格修正为标准的"application/json"。
请求体绑定逻辑
这个接口要求的是application/json格式的原始请求体,完全不需要用到form_data相关方法——表单类方法仅适配application/x-www-form-urlencoded、multipart/form-data的提交场景,会自动改写请求头格式,和本次接口要求不匹配。
绑定JSON请求体只需要通过handle_setopt给curl句柄补充两个关键配置:
- 显式声明请求方法为POST
- 将序列化完成的JSON字符串作为请求正文传入
完整可运行代码
# 提前安装依赖包:install.packages(c("curl", "jsonlite")) library(curl) library(jsonlite) # 替换为你自己的API密钥 api_key <- "xxx-xxx-xxx-xxx-xxxx" base_url <- "https://api.originstamp.com/v3" # 拼接完整接口地址 url <- paste(base_url, "timestamp", "proof", "url", sep = "/") # 创建新的curl句柄 h <- new_handle() # 设置请求头 handle_setheaders( h, accept = "application/json", Authorization = api_key, "content-type" = "application/json" ) # 构造请求参数,和原始bash命令的-d参数完全对齐 req_body <- list( currency = 0, hash_string = "2c5d36be542f8f0e7345d77753a5d7ea61a443ba6a9a86bb060332ad56dba38e", proof_type = 1 ) # 将R列表序列化为标准JSON字符串,自动处理转义,避免手拼字符串的格式错误 req_json <- toJSON(req_body, auto_unbox = TRUE) # 把POST方法和JSON请求体绑定到句柄上 handle_setopt( h, post = TRUE, postfields = req_json ) # 发起请求 response <- curl_fetch_memory(url, h) # 解析返回内容为R可读的列表结构 resp_data <- fromJSON(rawToChar(response$content))
容易踩的坑
- 不要调用
handle_setform方法,该方法会自动把Content-Type改写为表单类型,直接导致服务端解析JSON失败 - 给
postfields传值时必须是序列化好的JSON字符串,不能直接传R原生列表,否则会被自动转成表单字段格式 - 必须显式设置
post = TRUE,否则即使传了请求体,句柄也会默认按GET方法发起请求
内容的提问来源于stack exchange,提问作者Rainer
相关产品推荐
相关产品推荐

