如何通过Python 3获取Solr /admin/metrics接口的JSON响应而非HTML?
解决Python调用Solr接口返回HTML而非JSON的问题
你遇到的问题大概率是请求参数传递错误、请求头未正确指定,或者Solr返回了错误页面(比如权限校验失败、路径不正确)。下面推荐两种可行的方案,既有通用HTTP请求库,也有专门的Solr客户端模块:
一、使用通用HTTP请求库 requests
requests是Python生态中最常用的HTTP请求库,只要正确构造请求,就能拿到JSON响应。核心要确保三点:
- 完整的Solr接口URL(不要漏掉Solr的核心路径,比如
http://your-solr-host:8983/solr/<core-name>/admin/metrics) - 正确传递请求参数
- 指定
Accept: application/json请求头,或者确保wt=json参数生效
示例代码:
import requests solr_url = "http://your-solr-host:8983/solr/<core-name>/admin/metrics" params = { "group": "solr.jvm", "prefix": "os", "wt": "json" } headers = { "Accept": "application/json" } response = requests.get(solr_url, params=params, headers=headers) # 检查响应状态码,排除错误情况 if response.status_code == 200: json_data = response.json() print(json_data) else: # 如果还是返回HTML,打印响应内容排查问题 print(response.text)
如果仍返回HTML,建议打印响应内容,看是Solr的错误页面(比如404、401)还是参数错误提示,再针对性调整。
二、使用专门的Solr客户端模块 pysolr
pysolr是专为Solr设计的Python客户端,封装了很多Solr API的调用细节,使用更简洁。
首先安装模块:
pip install pysolr
示例代码(调用metrics接口):
import pysolr # 连接到指定Solr核心 solr = pysolr.Solr("http://your-solr-host:8983/solr/<core-name>", timeout=10) # 调用admin/metrics接口,传递参数 metrics = solr._send_request("GET", "/admin/metrics", { "group": "solr.jvm", "prefix": "os", "wt": "json" }) print(metrics)
_send_request方法可以直接调用Solr的管理接口,返回的就是解析后的JSON数据。
额外提示
- 确认Solr服务正常运行,且接口路径正确(比如是否需要指定核心,或者你的Solr是无核心模式?)
- 如果Solr开启了认证,需要在请求中加入认证信息(比如
requests的auth参数,或者pysolr初始化时传入auth)
内容的提问来源于stack exchange,提问作者Efox
相关产品推荐
相关产品推荐

