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

如何使用R的httr::POST实现和Postman效果一致的POST请求

你当前代码的核心错误是重复JSON编码:你已经提前把请求体序列化为JSON字符串了,调用httr::POST时又加了encode = 'json'参数,此时httr会把你传入的整个JSON字符串作为普通文本再次做JSON编码,最终发出的请求体不是服务端期望的结构化JSON,自然无法返回有效数据。


解决方法1:直接使用预制JSON字符串

不再使用encode参数,手动指定Content-Type请求头即可:

test <- httr::POST(
  url = 'https://www.krl.dk/sirka/sirkaApi/tableApi',
  body = body,
  httr::add_headers(`Content-Type` = "application/json")
)

解决方法2:用列表传参,让httr自动序列化

你也可以先把预制的JSON解析为R列表,再用encode='json'参数,避免手动构造JSON时可能出现的语法错误:

library(jsonlite)
# 把JSON字符串转为R列表
body_list <- fromJSON(body)

test <- httr::POST(
  url = 'https://www.krl.dk/sirka/sirkaApi/tableApi',
  body = body_list,
  encode = 'json'
)

额外注意事项

  • 确保你请求中携带的sails.sid Cookie未过期,且和Postman中使用的会话Cookie一致,否则服务端会拦截未授权的请求
  • 若修改后仍返回异常,可以把Postman中的User-Agent头也加到请求中,避免服务端做UA校验拦截R的默认请求标识
  • 正常返回CSV数据时响应的Content-Type应为text/csv,你可以请求成功后用httr::content(test, type = "text/csv")直接解析为数据框

内容的提问来源于stack exchange,提问作者Copenhagen_PDS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:04