【问题标题】:Authenticating connection in PySolrPySolr 中的身份验证连接
【发布时间】:2014-10-04 21:44:24
【问题描述】:

这是我第一次使用 Python 和 Solr。我在 GCE 上的 tomcat 中设置了我的 Solr 实例。我正在尝试使用 PySolr 从我的 Python 代码连接到它。但是,我不确定如何通过 PySolr 发送身份验证参数。

这是我得到的例外:

   solr = pysolr.Solr('http://MY INSTANCE IP/solr/News', timeout=10)
Apache Tomcat/7.0.28 - 错误报告

HTTP 状态 401 -

类型状态报告

消息

说明这个请求需要HTTP认证()。

Apache Tomcat/7.0.28

请指教。

【问题讨论】:

  • 看起来 HTTP 基本身份验证根本没有在 PySolr 中实现。有一个outstanding pull request,但那已经有好几年了,我怀疑这个 PR 是否会像那样合并。
  • 嗯,我可能会尝试切换到 solrpy,您是否推荐任何其他运行良好的软件包?我发现了另一篇关于使用 sunburnt 的帖子,但是查看他们的 API 文档,我没有看到关于身份验证的规定。 stackoverflow.com/questions/6466188/…
  • 老实说,我实际上会考虑根本不使用集成包。 Solr's JSON API 非常简单,使用 Python requests 模块,使用自定义标头(如 Authorization)发出 HTTP 请求、读取状态代码和处理 JSON 非常简单。因此,您最好自己与 Solr 交谈,如有必要,也可以编写自己的小包装模块。
  • grep 看来,solrpy 确实实现了 HTTP 基本身份验证:solr/core.py:426
  • 不客气,祝你好运。如果您找到适合自己的方法,请随时将其发布为答案并自我接受。

标签: python tomcat solr pysolr


【解决方案1】:
solr = pysolr.Solr('http://user:pass@IP:8983/solr/')

这就是你所需要的......

【讨论】:

    【解决方案2】:

    您可以通过 Solr 身份验证作为 Solr 连接参数的一部分。

    您在 pySolr 中没有关于如何执行身份验证的适当文档。由于 pySolr 内部使用请求进行身份验证,您可以关注 authentication in requests. 这是custom authentication as well.上的一个小例子

    在基本身份验证的情况下,您可以将其用作

        solr = pysolr.Solr('http://IP:8983/solr/collection',auth=('username','password'))
    

        from requests.auth import HTTPBasicAuth
        solr = pysolr.Solr('http://IP:8983/solr/collection',auth=HTTPBasicAuth('username','password'))
    

    这是正确的身份验证方式。不建议将用户名和密码作为 URL 的一部分传递,因为如果在其中使用 @' 可能会导致身份验证出现问题。Refer this GitHub issue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 2010-09-12
      • 2019-09-10
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多