使用SOLR调用HTTPS URL的DataImportHandler返回403

时间:2016-10-14 11:57:45

标签: solr dataimporthandler solr6

(这花了我一段时间,所以我提供问题和答案认为它是值得的。)

DataImportHandler必须从中检索数据的URL通过HTTPS和其他auth参数得到保护。 DataImportHandler的配置如下所示:

<dataConfig>
    <dataSource type="URLDataSource"
                baseUrl="https://www.gutscheinpony.de/"
                encoding="UTF-8"/>
    <document>
        <entity name="pony"
                pk="id"
                url="feeds.xml?auth=XXX"
                processor="XPathEntityProcessor"
                forEach="/data/offers/offer"
                xsl="xslt/gutscheinpony.xsl">

            <!-- fields omitted -->

        </entity>
    </document>
</dataConfig>

在常规SOLR 6安装上运行此操作将失败并使用403 Forbidden代码,同时通过curl对同一网址进行快速测试成功(仅显示有趣的输出):

curl https://www.gutscheinpony.de/feeds.xml?auth=XXX -Iv
> Host: www.gutscheinpony.de
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 200 OK
HTTP/1.1 200 OK

是否可以在不编写自定义Java代码的情况下为DataImportHandler连接设置用户代理?

1 个答案:

答案 0 :(得分:0)

不同之处在于Java默认情况下不设置用户代理。 SOLR和DataImportHandler也不会自动为HTTPS连接修复此问题。

可以使用System属性http.agent为Java进程设置用户代理值。只有当其他服务器关心它时,该值才有意义。

因此,当{SOLF}启动时,DataImportHandler将正常运行:

bin/solr -f -Dhttp.agent="test/me"