我正在用PHP实现兼容OAI-PMH2的数据提供程序(该数据提供程序从MySQL数据库检索数据,并且我试图对其进行验证,但仅遇到一个错误,阻止了成功验证。
错误与this question中描述的内容有些相关,但是在我的情况下,带有verb=Identify
的POST请求成功通过,而第二个失败。
更令人烦恼的是,当我使用curl
发送该请求时,该请求已成功处理,即它输出了格式正确的XML。
更具体地说,我得到的错误如下:
REQUEST http://www.mydataprovider/my_oaipmh2.php POST
identifier:oai:www.mydataprovider/my_oaipmh2.php:1
metadataPrefix:oai_dc verb:GetRecord
FAIL POST test 2 for GetRecord was unsuccessful, got neither a valid response nor an error
((当然,www.mydataprovider / my_oaipmh2.php代表URL。)
因此,我尝试通过curl
执行(几次)相同的POST请求,如下所示:
curl --data "verb=GetRecord&metadataPrefix=oai_dc&identifier=oai:www.mydataprovider/my_oaipmh2.php:1" http://www.mydataprovider/my_oaipmh2.php
并且它总是成功地返回带有第一条记录的正确XML响应。
我想念的是什么?这可能是由于某些服务器端设置引起的吗?(我自己没有访问服务器管理的权限,但是我可以问托管服务提供商。)
我发现了问题。由请求产生的XML格式不正确,因为它具有ListRecords
根元素,而不是适当的GetRecord
,即应为:
<GetRecord>
<record>
<header>
...
</header>
</record>
</GetRecord>