OpenSearch + PHP для INSPIRE ATOM: почему я могу получить правильный Content-Type?

Я следовал официальному техническому руководству для сервисов загрузки INSPIRE, чтобы создать ленту ATOM с OpenSearch: https://inspire.ec.europa.eu/documents/technical-guidance-implementation-inspire-download-services

Я застрял в создании PHP который выполняет поиск.

Согласно ранее упомянутому руководству, XML-описание OpenSearch должно иметь следующие шаблоны:

<Url type="application/zip" rel="results" template="http://myWeb/atom/search.php?spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&amp;spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&amp;crs={inspire_dls:crs?}&amp;language={language?}&amp;q={searchTerms?}"/>

<Url type="application/atom+xml" rel="describedby" template="http://myWeb/atom/search.php?spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&amp;spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&amp;crs={inspire_dls:crs?}&amp;language={language?}&amp;q={searchTerms?}"/>

Это же руководство имеет PHP скрипт, который поможет разработчику написать файл «search.php». Этот скрипт начинается так:

$returnFile = false;
foreach (apache_request_headers() as $name => $value) {
//echo("$name: $value\n");
if ($name=="Accept" && $value=="application/zip"){
$returnFile = true;
}
}

Если $returnFile Это правда, ZIP-файл должен быть возвращен. Если оно ложно, возвращается XML (это то, что делает остальная часть скрипта).

Моя проблема в том, что состояние $name=="Accept" && $value=="application/zip" никогда не соответствует действительности, поэтому поиск всегда возвращает XML.

Как может $value быть application/zip?

Это Accept значение, которое я получаю при доступе http://myWeb/atom/search.php:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

РЕДАКТИРОВАТЬ: Гид рассказывает кое-что еще об этом:

The example given in Annex A uses content negotiation to identify which
operation to perform. This means that even though the operation endpoint is
only one, i.e. http://myWeb/search.php, the client has to set the HTTP
―Accept‖ Header to the correct value in order to receive the expected
result.

Итак, если я проверяю свой фид ATOM в валидаторе INSPIRE, клиент будет валидатором INSPIRE (тот, который отправляет запросы в search.php) … я ошибаюсь?

1

Решение

Я открыл вопрос с разработчиками валидатора, и они подтвердили, что он работает не так, как ожидалось. Валидатор должен добавить в запрос заголовок «Accept», но он оставит его пустым. Они работают в исправлении.

0

Другие решения

Других решений пока нет …