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

SpringBoot使用RestTemplate调用NSE接口无响应问题求助

问题分析与解决

核心错误:请求头传递方式错误

你代码里的new HttpEntity<>(headerMap)是把headerMap作为请求体传入,而非请求头。RestTemplate的HttpEntity构造器第一个参数是请求体,第二个才是请求头。这会导致你的请求头根本没被正确设置,NSE服务器无法识别请求,从而出现无响应的情况。

修复后的代码

final String url = "https://www.nseindia.com/api/option-chain-indices?symbol=FINNIFTY";

// 正确创建请求头对象
HttpHeaders headers = new HttpHeaders();
headers.set("accept-language", "en-US,en;q=0.9");
headers.set("referer", "https://www.nseindia.com/option-chain");
headers.set("accept-encoding", "gzip, deflate, br");
headers.set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36");

// 注意:Cookie不能硬编码,需要从NSE官网的有效会话中获取,以下仅为示例格式
headers.set("cookie", "nsit=xxx; nseappid=xxx; bm_sv=xxx");

// 设置RestTemplate超时,避免无限等待
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(5000); // 连接超时5秒
factory.setReadTimeout(10000); // 读取超时10秒
RestTemplate restTemplate = new RestTemplate(factory);

System.out.println("about to call nse");
// 正确构造HttpEntity:第一个参数为null(GET请求无body),第二个是请求头
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(null, headers), String.class);
System.out.println("finished call nse");
System.out.println(response.getBody());

其他关键注意事项

  • Cookie不能硬编码:你使用的nsit、nseappid、bm_sv都是有有效期的,尤其是nseappid是JWT令牌,过期后请求会失效。正确的做法是先访问NSE的官网(如https://www.nseindia.com/option-chain),从浏览器开发者工具中获取当前有效的Cookie,再填入请求头。
  • 设置超时时间:原代码没有设置超时,导致请求无响应时一直挂起。添加连接和读取超时可以快速发现问题。
  • 请求头一致性:确保user-agent、accept-encoding等请求头与浏览器发送的一致,避免被NSE的反爬机制拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:44:55