使用 SOLR 的 DataImportHandler returns 调用 HTTPS URL 403

Calling HTTPS URL with SOLR's DataImportHandler returns 403

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

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 对相同 URL 的快速测试成功(仅显示有趣的输出):

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 连接设置用户代理?

区别在于Java默认不设置User Agent。 SOLR 和 DataImportHandler 都不会为 HTTPS 连接自动修复此问题。

可以使用 System 属性 http.agent 为 Java 进程设置用户代理值。该值仅在其他服务器关心它时才重要。

因此,当像这样启动 SOLR 时,DataImportHandler 将 运行 正常:

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