Я пытаюсь получить определенную веб-страницу с помощью php file_get_contents — когда я просматриваю страницу напрямую, проблем нет, но при попытке получить ее с помощью php я получаю «не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 403 Forbidden». Есть часть данных, которые я пытаюсь извлечь со страницы.
$ft = file_get_contents('https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000');
echo $ft;
Я читал здесь на разных страницах об использовании stream_context_create, в основном, в части пользовательского агента
$context = stream_context_create(
array(
"http" => array(
"header" => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36")
)
);
Но ничего не работает, и теперь я получаю сообщение об ошибке 400. К сожалению, не похоже, что мой сервер настроен на использование cURL, поэтому file_get_contents кажется мне единственным способом сделать это.
Вам нужно добавить User-Agent
заголовок к фактическому заголовку:
$context = stream_context_create(
array(
"http" => array(
"header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36")
));
Вы также можете использовать user_agent
опция:
$context = stream_context_create(array(
'http' => array(
'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
)
));
Оба приведенных выше примера должны работать, и теперь вы сможете получить содержимое, используя:
$content = file_get_contents('https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000', false, $context);
echo $content;
Конечно, это также можно проверить с помощью curl из командной строки. Обратите внимание, что мы устанавливаем нашу собственную User-Agent
заголовок:
curl --verbose -H 'User-Agent: YourApplication/1.0' 'https://www.vesselfinder.com/vessels/CELEBRITY-MILLENNIUM-IMO-9189419-MMSI-249055000'
Также стоит знать, что по умолчанию User-Agent
используется curl, кажется, заблокирован, так что если вы используете curl, вам нужно добавить свой собственный, используя -H
флаг.
По словам @ADyson, служба, к которой вы обращаетесь, — Vesselfinder — запрещает автоматический анализ их данных. Прочитайте документы: https://www.vesselfinder.com/de/realtime-ais-data#rt-web-services
Вы можете попросить у них токен API, возможно, это платный план.
У них есть официальный API. Вам нужен ключ API.