Php get headers не работает

php get_headers не работает для URL-адреса, который я могу ввести в браузер

Я использую get_headers для проверки действительности URL-адреса. https://central.bac-lac.gc.ca/.item/?app=Census1921&op=img&id=e002943819 Если я введу этот URL-адрес в свой браузер, он заработает. Но если я хочу протестировать URL-адрес ПЕРЕД тем, как вставить его в тег, передав его в get_headers, это не удастся. Предупреждение: get_headers (): операция SSL завершилась неудачно с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 1416F086: процедуры SSL: tls_process_server_certificate: проверка сертификата не удалась в /home/jamescobban/public_html/DisplayImage.php в строке 186 Предупреждение: get_headers (): не удалось включить шифрование в /home/jamescobban/public_html/DisplayImage.php в строке 186 Предупреждение: get_headers (https://central.bac-lac.gc.ca/.item/?app=Census1921&op=img&id=e002943819): не удалось открыть поток: не удалось выполнить операцию в /home/jamescobban/public_html/DisplayImage.php в строке 186 Поэтому мой код выдает сообщение об ошибке вместо того, чтобы вставлять URL-адрес в тег. См. Это на https://www.jamescobban.net/DisplayImage.php?src=https%3A%2F%2Fcentral.bac-lac.gc.ca%2F.item%2F%3Fapp%3DCensus1921%.26op%3Dimg%26id%3De002943819&buttonname=imageButton&lang=en Сравните это с https://www.jamescobban.net/DisplayImage.php?src=https%3A%2F%2Fdata2.collectionscanada.ca%2F1911%2Fjpg%2Fe001984006.jpg&buttonname=imageButton&lang=en, который is администрируется тем же отделом, но на другом сервере. Поскольку ответ представляет собой не что иное, как JPEG, я спросил их, почему они добавили сложность запуска сценария, но они являются ПРАВИТЕЛЬСТВОМ и не должны отвечать простым налогоплательщикам. К счастью, на данный момент они не удалили старые серверы, на которых просто хранились изображения, но этот режим доступа недоступен для последней опубликованной переписи. Как видите, единственная цель моего сценария — добавить оболочку вокруг JPEG, чтобы пользователь мог выполнять некоторые операции с изображением. Я подозреваю, что проблема в том, что на этом веб-сайте ПРАВИТЕЛЬСТВА используется сертификат с истекшим сроком действия. Я сообщил, что обнаружил эту проблему в отделе несколько месяцев назад, но они под предлогом COVID сидят на задних лапах, хотя, очевидно, их веб-сайт важнее, чем когда-либо в наши дни, когда мы не можем войти в их офис! Как я могу убедить get_headers игнорировать плохой сертификат так же, как это делают браузеры? В конце концов, это не значит, что я не доверяю тому, что домен, заканчивающийся на .gc.ca, законно предоставлен правительством, но по соображениям конфиденциальности все же желательно зашифровать мои обмены данными с любым государственным учреждением. Предложение отключить проверку безопасности недопустимо. Я просто хочу, чтобы get_headers сообщал мне, можно ли использовать URL-адрес в теге, чтобы я не получал сообщение об ошибке по умолчанию от браузера. Если вы хотите увидеть код, вызывающий get_header, перейдите на https://github.com/jcobban/Genealogy/blob/master/DisplayImage.php

Читайте также:  Python лист удалить дубликаты

На сервере неверная настройка, см. этот SSLLabs отчет и поиск цепи неполный. Вот почему это не удается. И не ждите, что другие будут копаться в каком-то большом коде, чтобы узнать, что вы делаете, — вместо этого создайте минимальный пример. — person Steffen Ullrich &nbsp schedule 18.01.2021

Благодарю за ваш ответ. Однако я не могу контролировать, что делают или не делают администраторы другого сайта. Это правительственный сервер, на который я просто пытаюсь определить ссылки с моего сайта. Как я уже сказал, я уже знал, что сертификат нарушен. Но ни один браузер, даже Firefox, не жалуется на этот сертификат низкого качества, даже в предупреждении. Мне нужен способ убедиться, что href будет работать, прежде чем вставлять его в тег. Мне нужно иметь возможность работать с неисправными серверами, которые Я НЕ МОГУ ИСПРАВИТЬ. — person James Cobban &nbsp schedule 18.01.2021

Ответы (1)

 $context = stream_context_create(['ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, ]]); $headers = get_headers($src,0,$context); 

Источник

PHP 7.4 не правильная работа get_headers()

Сначала объясню для чего и как я использую get_headers(). У меня сайт с музыкальными клипами Ютуба. В конце кода страницы исполнителя или клипа я сделал проверку когда последний раз проверялись обновления и если прошло более 2 дней, то запускаем чекер обновлений командой get_headers($url). Почему командой get_headers(), а не инкладом? Да потому что чекер довольно долго отрабатывает, он скачивает автоплейлист исполнителя, все альбомы с композициями и постеры к ним и в конце уже создаёт новый кешь страницы. Всё хорошо работало больше года, но сегодня при попытке открыть страницу одного исполнителя, сайт «завис» секунд на 20-30! Пока не отработался чекер! Чекер с Ютубом работает через его стандартный API, но лимит на ключь доступа к API зарезали до 10к, а это очень мало, поэтому я юзаю 100 ключей. В чекере я сделал ошибку, если при запросе к Ютубу получаю 403 ошибку, то начинаю перебор ключей доступа, но тут ошибка не ключа доступа, а сам канал заблокирован, то есть 403 ошибка канала, а не ключа! Чекер через курлы перебирает всё 100 ключей доступа, но почему не отдается заголовок при этом? Как такое может быть? Буду очень благодарен если кто ни будь подскажет как можно из файла php запустить паралельно другой файл php? Чекеру нужно передать только один параметр это id исполнителя, всю полученную инфу чекер не куда не передаёт, просто записывает в БД. Браузерные варианты не подходят, ну типа через скрипт JS или через картинку с редиректом. Чаще всего чекер запускают поисковые боты, а они не запускают JS скрипты и не грузят картинки.

Читайте также:  Php get http request data

Источник

PHP get_headers не работает на локальных URL Apache

Я использую get_headers() чтобы увидеть, работают ли сайты или нет, и все нормально, но когда я пытаюсь проверить свои локальные сайты, я получаю сообщение об ошибке «время ожидания ответа истекло». «Локальные» URL-адреса не относятся к «реальному» домену, а выглядят примерно так:

http://steve-emachine/WEBSITES_PHP/Sites/HOGSMILL/index.php 

. где ‘steve-emachine’ — это имя моей машины. Есть ли способ использовать get_headers() на этот вид URL? URL отлично работают в браузере, так что, очевидно, проблема заключается в моем незнании того, как работает HTTP.

2 ответа

Убедитесь, что вы используете полный адрес с префиксом http:// в вашем php-коде. Как это

файл hosts находится в / etc / hosts в linux и выглядит примерно как 127.0.0.1 localhost 127.0.1.1 drew-ThinkPad-T410 127.0.0.1 local.mysite.com

Хотя для меня упомянутые вами форматы URL работают, убедитесь, что у вас есть запись в файле hosts вашей операционной системы для того конкретного домена, который вы используете (steve-emachine в вашем случае). Чтобы использовать get_headers() на локальном сайте, вы можете сделать это:

  1. Добавьте виртуальный хост на ваш сервер с таким именем, как local.mysite.com
  2. Сделайте запись хоста в вашей операционной системе для этого домена 127.0.0.1 local.mysite.com
  3. Перезагрузите ваш сервер
  4. используйте $ url = http://local.mysite.com/ в get_headers(), все будет работать нормально.

Источник

Как получить header недоступного сервера?

Ситуация следующая: есть список сайтов, который нужно периодически, так сказать, «прозванивать» и проверять на доступность.
Решил получать данные через get_headers(), затем проверять код ответа, и если код не равен 200, 301 или 302, то бить тревогу.

$url = 'https://yandex.ru'; $result = get_headers($url); if (strpos($result[0], '301') || strpos($result[0], '200') || strpos($result[0], '302')) { echo 'Всё ок'; } else { echo 'Всё плохо'; }

Но если указать несуществующий или недоступный сайт:

$url = 'https://y123123andex.ru'; $result = get_headers($url); if (strpos($result[0], '301') || strpos($result[0], '200') || strpos($result[0], '302')) { echo 'Всё ок'; } else { echo 'Всё плохо'; }

То получаем сначала ошибку:
PHP warning: get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known
PHP warning: get_headers(https://y123123andex.ru): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known

Читайте также:  Питон комментарий нескольких строк

и только потом ответ «Всё плохо»

Так вот вопрос у меня, как убрать эту ошибку?
Так-то она не мешает, если ручками скрипт запускать, но вот при запуске по крону — из-за ошибки ничего дальше не работает.

Прием Header от другого сервера
Всем привет! Столкнулся с такой штукой, совершенно новой для меня: Удаленный сервер присылает.

Как получить данные от сервера?
Добрый день, уважаемые форумчане. Меня интересует следующий вопрос. Я должен обратиться к серверу.

Как в PHP получить текст из буфера обмена сервера?
На локальной машине нужно получить текст из буфера обмена. Вот допустим на сайте Х скопировал.

Как получить текущий урл страницы без сервера и get — параметров?
Например, для страницы http://www.localhost:6448/info/catalogue/standart.html?clear_cache=Y.

Лучший ответ

Сообщение было отмечено axle_vega как решение

Решение

Добавлено через 6 минут
А в идеале.

$fP = @fsockopen($host, 80, $errno, $errstr, 10); if (!$fP) { echo "down"; }else{echo "ok";}

Источник

Оцените статью