使用 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"
(这花了我一段时间,所以我提供了问题和答案,认为这是值得的。)
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"