我正在尝试连接到远程gremlin服务器,它需要使用gremlin_python通过ssl进行无名/密码身份验证。这是我使用的代码片段:
conf = yaml.load(stream, Loader=yaml.SafeLoader)
print(conf)
g = traversal().withRemote(DriverRemoteConnection(**conf))conf dict的内容是:
{'url': 'wss://my-url.com:port', 'username': 'admin', 'password': '**', 'traversal_source': 'graph_traversal'}我可以使用conf/my.properties文件从gremlin控制台连接到相同的服务器,如下所示
hosts: [my-url.com]
port: port
username: admin
password: *
connectionPool: { enableSsl: true }
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}我尝试从python连接的结果是一个E tornado.httpclient.HTTPError: HTTP 502: Bad Gateway。我知道我的连接url本身是正确的,我能够从gremlin-console连接以及通过https发送脚本。我一直在尝试查看代码here,以找出问题出在哪里。
EDIT:在深入了解这一点之后,我发现您可以使用头部中带有auth令牌的wss server进行身份验证。我能够直接用websockets测试这一点。当我为gremlin_python打开一个DriverRemoteConnection时,有没有办法在头部传递一个参数?
发布于 2019-04-01 20:19:46
将{{ end_point }}、{{ username }}、{{ password }}替换为您的实际价值:
from tornado import httpclient
my_req = httpclient.HTTPRequest('wss://{{ end_point }}:8182/gremlin', headers={"Authorization": "Token AZX ..."})
DriverRemoteConnection(my_req, 'g', username="{{ username }}", password="{{ password }}")https://stackoverflow.com/questions/55424273
复制相似问题