получить содержимое файла — Есть ли способ обойти ошибку 403 с php file_get_contents?

Я пытаюсь получить определенную веб-страницу с помощью 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 кажется мне единственным способом сделать это.

0

Решение

Вам нужно добавить 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 флаг.

3

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

По словам @ADyson, служба, к которой вы обращаетесь, — Vesselfinder — запрещает автоматический анализ их данных. Прочитайте документы: https://www.vesselfinder.com/de/realtime-ais-data#rt-web-services
Вы можете попросить у них токен API, возможно, это платный план.

У них есть официальный API. Вам нужен ключ API.

0

По вопросам рекламы [email protected]