使用R语言httr包发送JSON格式POST请求返回异常如何解决?
解决方案
核心问题原因
该接口是ASP.NET WebForm后端服务,除了请求体格式要求外,还会校验请求是否为异步AJAX请求,未通过校验时会直接返回HTML页面而非预期JSON数据。
可运行完整代码
library(httr) library(jsonlite) # 目标接口地址 url <- "https://www.rad.cvm.gov.br/ENET/frmConsultaExternaCVM.aspx/ListarDocumentos" # 请求参数 payload <- list( dataDe = '', dataAte = '' , empresa = '', setorAtividade = '-1', categoriaEmissor = '-1', situacaoEmissor = '-1', tipoParticipante = '-1', dataReferencia = '', categoria = 'EST_3', periodo = '1', horaIni = '', horaFim = '', palavraChave = '', ultimaDtRef = 'false', tipoEmpresa = '0' ) # 发送POST请求 r <- POST( url = url, # 配置必填请求头 add_headers( `X-Requested-With` = "XMLHttpRequest", `Accept` = "application/json, text/javascript, */*; q=0.01" ), # 传入参数列表,指定json编码自动处理序列化和请求头 body = payload, encode = "json" ) # 解析返回结果 result <- content(r, "parsed") # ASP.NET WebMethod默认将业务数据封装在d字段中 business_data <- result$d
关键调整说明
- 新增
X-Requested-With请求头,值固定为XMLHttpRequest,标识当前是异步AJAX请求,通过后端校验 - 直接传递list类型参数给body,设置
encode = "json",httr会自动完成JSON序列化,同时正确配置Content-Type: application/json请求头,无需手动调用toJSON和content_type_json - 返回结果的实际业务数据存储在
d字段中,这是ASP.NET WebMethod的标准返回格式
内容的提问来源于stack exchange,提问作者xavi
相关产品推荐
相关产品推荐

