R语言httr包POST请求investing.com未返回预期JSON问题排查
错误原因
- 请求头传递方式错误:httr包的
POST()函数传入自定义请求头需要调用add_headers()方法,你直接传递列表给header参数不符合函数要求,导致所有自定义请求头都没有生效,这是Content-Type丢失的核心原因。 - 请求参数位置错误:你抓包的XHR是POST类型请求,
search_text参数需要放在请求体中传递,你错误把它放到了query参数里,相当于在URL后拼接参数,发送的POST请求没有任何有效请求体,服务器无法识别合法请求,直接返回了首页。 - 多余的静态配置项:不要手动填写
Content-Length请求头,httr会自动根据请求体的长度计算该值,手动写死很容易因为参数长度变化导致请求异常。
修正后可运行代码
library(httr) library(jsonlite) codeIsin <- 'FR0000120404' investing_url <- "https://fr.investing.com/search/service/searchTopBar" # 构造请求头 investing_headers <- add_headers( "User-Agent" = "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0", "Accept" = "application/json, text/javascript, */*; q=0.01", "Accept-Language" = "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3", "X-Requested-With" = "XMLHttpRequest", "Origin" = "https://fr.investing.com" ) # 构造请求体,encode=form会自动设置Content-Type为x-www-form-urlencoded格式 response <- POST( url = investing_url, body = list(search_text = codeIsin), encode = "form", investing_headers ) # 解析返回的JSON结果 result <- content(response, as = "parsed") print(result$quotes)
内容的提问来源于stack exchange,提问作者rfan
相关产品推荐
相关产品推荐

