PHP file_get_contents использует & вместо & в API OpenStreetMap и возвращает 403 - PullRequest
0 голосов
/ 08 ноября 2019

Я использую OpenStreetMap API для возврата XML . Таким образом, использование Search for Test ?q=test&format=xml) - это, например, поиск реки в Англии. Пока все хорошо.

Моя проблема в том, что API очень ограничен. Таким образом, поиск Поиск теста q=test&format=xml) - это (при использовании обычного браузера) перенаправление на указанную выше ссылку. Но если вы скопируете и вставите URL с ?q=test&format=xml, он должен выглядеть следующим образом: failing request

Это не XML,Таким образом, URL не соответствует OpenStreetMap. Потому что параметр format больше не распознается.

И это только моя проблема. Поэтому, когда я пытаюсь использовать в PHP: file_get_contents("http://nominatim.openstreetmap.org/search?q=test&format=xml");

, я получаю исключение:

Произошло исключение. Предупреждение: file_get_contents (http://nominatim.openstreetmap.org/search?q=test&format=xml): не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 403 Запрещено

enter image description here

I 'Я не совсем уверен, что вызывает это переписывание &. Это OpenStreetMap или PHP file_get_contents? Я уже рассмотрел следующие вопросы. Но, к сожалению, ни одно из этих решений не помогло мне:

Также пытался поиграть со значениями php.ini:

  • arg_separator.output = "&"
  • arg_separator.input = "; &"

1 Ответ

0 голосов
/ 08 ноября 2019

На самом деле это была , а не проблема &. исправление ошибка 403 работает правильно. Эта ссылка помогла мне найти решение, поскольку OpenStreetMap теперь требует http referer.

Таким образом, этот код исправляет мою проблему:

  $referer = "https://nominatim.openstreetmap.org/search?q=test&format=xml";
  $opts = array(
    'http'=>array(
        'header'=>array("Referer: $referer\r\n")
    )
  );
  $context = stream_context_create($opts);
  $myURL = file_get_contents($referer, false, $context); 
...