Python连接Elasticsearch认证报错:TypeError: 'Session' object is not callable
解决Python操作Elasticsearch时的
TypeError: 'Session' object is not callable错误 嘿,我来帮你定位问题出在哪!你这段代码的核心问题是混淆了Session对象的用法,具体来说:
你创建了requests.Session()实例并设置了认证,但之后却还是用requests.get()发起请求,还错误地把session对象传给了auth参数——而auth参数需要的是像HTTPBasicAuth这样的认证对象,不是Session实例,这就直接导致了那个类型错误。
给你两种修正方案,选一种就行:
方案一:用Session对象发起请求(推荐,适合需要保持会话的场景)
import requests from requests.auth import HTTPBasicAuth uname = 'elastic' pswd = 'elastic' # 创建Session实例并设置认证,后续所有请求都会自动带上这个认证 session = requests.Session() session.auth = HTTPBasicAuth(uname, pswd) # 用session调用get方法,而不是requests.get res = session.get('http://localhost:9200') print(res.content)
方案二:直接在请求中传入认证(适合单次请求)
如果不需要保持会话,也可以不用Session,直接把认证对象传给auth参数:
import requests from requests.auth import HTTPBasicAuth uname = 'elastic' pswd = 'elastic' # 直接将HTTPBasicAuth实例传入auth参数 res = requests.get('http://localhost:9200', auth=HTTPBasicAuth(uname, pswd)) print(res.content)
简单总结下:Session是用来管理会话的工具,设置好认证后要通过它来发起请求;而auth参数只接受认证凭证对象,不能直接传Session。
内容的提问来源于stack exchange,提问作者Kailash Sharma
相关产品推荐
相关产品推荐

