File_get_contents возвращает запрос HTTP не удалось! HTTP / 1.1 403 Запрещенная ошибка? [Дубликат]

Простое объяснение того, что такое Исключение из связанного исключения:

Подумайте, что в одном из поездов есть его отсеки: D1, D2, D3. Один пассажир пришел, чтобы войти в поезд, и у него есть билет на D4. теперь, что будет. пассажир хочет войти в отсек, который не существует, поэтому явно возникнет проблема.

Тот же сценарий: всякий раз, когда мы пытаемся получить доступ к списку массивов и т. д., мы можем получить доступ только к существующим индексам в массив. array[0] и array[1]. Если мы попытаемся получить доступ к array[3], его там не будет, поэтому появится индекс из связанного исключения.

19
задан absk 28 December 2010 в 12:46
поделиться

9 ответов

Это не проблема с вашим скриптом, а с ресурсом, который вы запрашиваете. Веб-сервер возвращает «запрещенный» код состояния.

Возможно, он блокирует PHP-скрипты, чтобы предотвратить очистку, или ваш IP-адрес, если вы сделали слишком много запросов.

Вы вероятно, следует поговорить с администратором удаленного сервера.

16
ответ дан Pekka 웃 21 August 2018 в 04:46
поделиться
  • 1
    Но в то же время он отлично работает на моем локальном хосте. Кажется, проблема связана с моей конфигурацией сервера. – absk 28 December 2010 в 12:49
  • 2
    @absk no, 403 forbidden явно находится на удаленном сервере. Соединение работает нормально - попробуйте другой IP-адрес для проверки. Возможно, IP-адрес вашего сервера заблокирован на удаленном сервере – Pekka 웃 28 December 2010 в 12:50

Проверяли ли вы свои права на файл? Я установил 777 в свой файл (в localhost, очевидно), и я исправил проблему.

1
ответ дан Andrea Syd Coi 21 August 2018 в 04:46
поделиться

Я понимаю, что это старый вопрос, но ...

Просто настройте мою локальную песочницу на linux с php7 и пробежав по ней. Используя сценарии запуска терминала, php вызывает php.ini для CLI. Я обнаружил, что опция user_agent была закомментирована. Я раскоментировал его и добавил пользовательский агент Mozilla, теперь он работает.

2
ответ дан CrookedCreek 21 August 2018 в 04:46
поделиться

Вы можете изменить его, как это, в классе парсеров из строки 35 и дальше.

function curl_get_contents($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

function file_get_html()
{
  $dom = new simple_html_dom;
  $args = func_get_args();
  $dom->load(call_user_func_array('curl_get_contents', $args), true);
  return $dom;
}

Вы пробовали другой сайт?

4
ответ дан Dejan Marjanovic 21 August 2018 в 04:46
поделиться
  • 1
    Но как это должно исправить удаленный 403? – Pekka 웃 28 December 2010 в 12:52
  • 2
    Он упомянул cURL, поэтому первая часть ответа была для этого, а вторая «Пробовали ли вы другой сайт?» Или он может дать нам ссылку для проверки. Я знаю, что 403 является удаленным, поэтому я предлагаю ему попробовать другие сайты. – Dejan Marjanovic 28 December 2010 в 12:53
  • 3
    Таким образом, он извлекает данные из других сайтов. Кажется, мой IP только что попал в черный список. В любом случае? – absk 28 December 2010 в 12:58
  • 4
    – Dejan Marjanovic 28 December 2010 в 13:05

Я получил тот же pb. Я только что активировал Youtube API от разработчиков консоли Google ... и он работал (не более запрещен: -)

Я не знаю, обесценен ли предмет, я думал просто поделиться идеей С наилучшими пожеланиями

0
ответ дан Hamid ER-REMLI 21 August 2018 в 04:46
поделиться

Запишите это в simple_html_dom.php для меня это сработало

function curl_get_contents($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$html = curl_exec($ch);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
    $dom = new simple_html_dom;
  $args = func_get_args();
  $dom->load(call_user_func_array('curl_get_contents', $args), true);
  return $dom;
    //$dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);

}
4
ответ дан r0adtr1p 21 August 2018 в 04:46
поделиться

Кажется, что на удаленном сервере есть некоторый тип блокировки. Это может быть пользователь-агент, если это так, вы можете попробовать использовать завиток для имитации пользовательского агента веб-браузера следующим образом:

$url="http://www.example.com/viewProperty.html?id=".$id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$html = curl_exec($ch);
curl_close($ch);
3
ответ дан Sergi 21 August 2018 в 04:46
поделиться

В моем случае сервер отклонил протокол HTTP 1.0 через его конфигурацию .htaccess. Кажется, file_get_contents использует версию HTTP 1.0.

0
ответ дан Steven 21 August 2018 в 04:46
поделиться

Я знаю, что это довольно старый поток, но подумал о том, чтобы поделиться некоторыми идеями.

Скорее всего, если вы не получите какой-либо контент во время доступа к веб-странице, возможно, он не хочет, чтобы вы могли получить контент. Итак, как он идентифицирует, что скрипт пытается получить доступ к веб-странице, а не человеку? Как правило, это заголовок User-Agent в HTTP-запросе, отправленном на сервер.

Итак, чтобы веб-сайт подумал, что скрипт, обращающийся к веб-странице, также является человеком , вы должны измените заголовок User-Agent во время запроса. Большинство веб-серверов, вероятно, разрешают ваш запрос, если вы установите заголовок User-Agent на значение, которое используется некоторым обычным веб-браузером.

Список общих пользовательских агентов, используемых браузерами, приведен ниже:

  • Chrome: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
  • Firefox: 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0'
  • и т. д. ...

$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"
        )
    )
);

echo file_get_contents("www.google.com", false, $context);

Этот фрагмент кода подделывает пользовательский агент и отправляет запрос на https://google.com .

Ссылки:

Приветствия!

11
ответ дан Sz. 21 August 2018 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: