api.ai/dialogflow的python客户端提供了一种通过text_request()发送查询和获取响应的方法。这是代码块
def main():
ai = apiai.ApiAI(CLIENT_ACCESS_TOKEN)
request = ai.text_request()
request.lang = 'de' # optional, default value equal 'en'
request.session_id = "<SESSION ID, UNIQUE FOR EACH USER>"
request.query = "Hello"
response = request.getresponse()
print (response.read())
但问题是text_request()
使用 HTTPSConnection类来发送与我的主服务器页面的 HTTPS 连接不兼容的请求。因为,我必须使用websocket,并且我在我的主server.py
中调用api.ai请求,该请求由 uWSGI 服务器提供,该服务器提供了用于 HTTPS的自签名ssl证书连接。
因此,在 HTTPS 连接中使用自签名ssl调用text_request()
会给我以下错误,
文件“server.py”,第84行,在chat_message中 response = request.getresponse()文件“/home/user/uwsgi_Test/virtual_frame/lib/python3.5/site-packages/apiai/requests/request.py”, 第128行,在getresponse中 self._connect()文件“/home/user/uwsgi_Test/virtual_frame/lib/python3.5/site-packages/apiai/requests/request.py”, 第82行,在_connect中 self._connection.connect()
以下是request.py
getresponse()
方法
def getresponse(self):
"""Send all data and wait for response.
"""
if getattr(self._connection, 'sock', None) is None:
self._connect()
end = self._prepage_end_request_data()
if end is not None:
self.send(end.encode('utf-8'))
self._beforegetresponce()
return self._connection.getresponse()
虽然它适用于HTTP请求。
所以,在这种情况下,我认为有两种方法可以解决:
1)text_request()
根本不会检查安全证书。类似于python请求verify = False
-
requests.get('https://kennethreitz.com',verify = False)
2)将自签名证书作为参数发送到text_request()。因此,虽然发送请求和获取响应安全证书可以使用我将发送的证书文件进行验证。
如何实际扩展send_text()
方法,如上所述。或者,api.ai python客户端本身是否支持禁用ssl验证?