我正在尝试将Amazon CloudSearch集成到SilverStripe中。我想做的是,当页面发布时,我想要一个CURL请求将页面数据作为JSON字符串发送到搜索云。
我使用http://docs.aws.amazon.com/cloudsearch/latest/developerguide/uploading-data.html#uploading-data-api作为参考。
每次我尝试上传它都会返回403。我已经允许IP地址在访问策略的搜索域以及。
我使用它作为代码参考:https://github.com/markwilson/AwsCloudSearchPhp
我认为问题是AWS没有正确认证。我如何正确验证它?
6条答案
按热度按时间0mkxixxg1#
如果您收到以下错误
403 Forbidden,请求被管理规则禁止。
如果你确定你有适当的规则生效,我会检查你正在使用的API URL。确保您使用的是正确的端点。如果您正在进行批量上载,则API端点应如下所示
your-search-doc-endpoint/2013-01-01/documents/batch
注意2013-01-01,这是URL的必需部分。这是您将使用的API版本。您不能执行以下操作,即使它可能有意义
your-search-doc-endpoint/documents/batch<-不工作
要搜索,您需要点击以下API
your-search-endpoint/2013-01-01/search?您的搜索参数
k7fdbhmy2#
经过多次搜索和反复试验,我能够把一个小的代码块放在一起,从各地的小片段代码,能够上传一个“文件”使用CURL和PHP到AWS cloudsearch。
最重要的一件事是确保您的数据以JSON格式正确发送。
注意:对于cloudsearch,你上传的不是文件,而是JSON数据流。这就是为什么我们中的许多人在上传数据时遇到问题。
因此,在我的情况下,我希望能够上传数据,我的搜索引擎在clousearch上,这似乎很简单,但缺乏示例代码来做到这一点,大多数人告诉你去文档,通常有例子,但使用aws CLI。php SDK只是一个学习的工具,而不是让它变得简单,你做20个步骤来完成一个任务,不仅你需要拥有所有这些其他的库,这些库只是原生PHP函数的 Package 器,有时不是让它变得简单,而是变得复杂。
回到我是如何做到这一点的,首先我从数据库中提取数据作为一个数组,并将其序列化以保存到一个文件中。
现在你有你的数据保存我们可以玩它
就像我说的,没有什么。我遇到的大多数答案,使用Guzzle它真的很容易,是的,但对于像这样的简单任务,你不需要它。
除此之外,如果你仍然得到一个错误,请确保检查以下内容。
格式良好的JSON数据确保您有权访问端点。
我希望有人发现这个代码有帮助。
3duebb1j3#
要诊断这是否是访问策略问题,您是否尝试过允许所有人访问上载的策略?下面这样的东西打开了它的一切:
我注意到,如果你只是在浏览器中访问文档上传端点(我的看起来像“doc-YOURDOMAIN-RANDOMID.REGION.cloudsearch.amazonaws.com“),你会得到403“管理规则禁止的请求”错误,即使是开放访问,所以as @dminer said你需要确保你发布到正确的完整网址。
**您是否考虑过使用PHP SDK?**类似http://docs.aws.amazon.com/aws-sdk-php/guide/latest/service-cloudsearchdomain.html。它应该负责发出正确的请求,在这种情况下,您可以排除传输错误。
nwnhqdif4#
这对我从来都不管用我用云搜索终端上传文件和php curl来搜索文件。
hgc7kmma5#
尝试将“cloudsearch:document”添加到CloudSearch的访问策略中的“操作”下
pbossiut6#
我在
403 Forbidden, Request forbidden by administrative rules
上遇到了同样的问题。这完全是由于使用文档结束点并添加API版本,如下所示。在向Cloud Search中插入数据时,这一部分非常重要:
由于您正在尝试将数据插入到Cloud Search中,因此需要使用AWS提供的Cloud Search的文档端点。
需要后面跟着API版本,如下所示:
同时要注意添加内容类型,否则最终可能会得到
HTTP 415 Unsupported Media Type
错误。