@eugene159

Почему не получается скачать файл по этой ссылке средствами PHP (403 ошибка)? Как исправить код, чтобы он работал?

Вот мой код:
<?php
$url = 'https://www.vseinstrumenti.ru/instruction/1486389_manual.docx';

ini_set('user_agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');
$contextOptions = [
    "ssl" => [
        "verify_peer" => false,
        "verify_peer_name" => false,
        'allow_self_signed' => true
    ],
];
$downloadedFile = file_get_contents($url, false, stream_context_create($contextOptions));

if ($downloadedFile === false) {
    $text = 'Ошибка при скачивании файла по ссылке: ' . $url;
    $headers = get_headers($url, 1);
    if (!empty($headers[0])) {
        $code = str_replace('HTTP / 1.1 ', '', $headers[0]);
        $text .= ', вот код ответа: ' . $code;
    }
    echo $text;
} else {
    echo 'Все отлично';
}

Мне выводится сообщение:
Ошибка при скачивании файла по ссылке: https://www.vseinstrumenti.ru/instruction/1486389_..., вот код ответа: HTTP/1.1 403 Forbidden


Если я захожу на страницу через браузер, то никаких ошибок нет, документ docx отдается. То есть это не блокировка по IP.
Я пробовал менять useragent в коде - не помогло. То есть это не блокировка по Useragent.

Как мне исправить мой код, чтобы он работал?
  • Вопрос задан
  • 483 просмотра
Пригласить эксперта
Ответы на вопрос 3
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Прописывайте все-все header-ы, которые в своём запросе отправляет настоящий браузер, в том числе cookie. Ну и раз уж смотрите его запросы - задно смотрите, документ скачивается сразу по запросу, или через какой-нибудь редирект?
Ответ написан
flapflapjack
@flapflapjack
на треть я прав
может дело не в юзерагенте а в http_referrer?
Ответ написан
Потому что при скачивании, в запросе передаётся много токенов в куках. Сделано это специально чтобы люди не выкачивали файлы автоматически. Чтобы обойти защиту надо разобрать формирование каждого токена, либо основного.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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