Как установить заголовок реферера в Guzzle и получить контент CDN

#php #symfony #web-scraping #web-crawler #guzzle

Вопрос:

Я хочу очистить веб-сайт и использую guzzle 7.4 и Symfony Dom Crawler

Я успешно извлек данные HTML, но веб-сайт использует CDN для размещения некоторых ресурсов, и они не загружаются, потому что заголовок не отправляется для получения этих ресурсов

ниже приведен код, извлекающий html

 lt;?php  require "vendor/autoload.php";  use SymfonyComponentDomCrawlerCrawler;  // Url $url = 'scrapingdomain.com'; $headers = [  'referer' =gt; 'examplescrapingdomain.com' ];  $client = new GuzzleHttpClient([  'headers' =gt; $headers ]);  // go get the data from url $response = $client-gt;request('GET', $url); $html = ''.$response-gt;getBody(); $crawler = new Crawler($html);  echo $html;  ?gt;  

Если я обращусь непосредственно к CDN и установлю заголовок referer, я получу ответ 200

Ниже Приведен Код

 lt;?php  require "vendor/autoload.php";  use SymfonyComponentDomCrawlerCrawler;  // Url $url = 'examplecdnresource.com/Images.png'; $headers = [  'referer' =gt; 'examplescrapingdomain.com' ];  $client = new GuzzleHttpClient([  'headers' =gt; $headers ]);  // go get the data from url $response = $client-gt;request('GET', $url); $html = ''.$response-gt;getBody(); $crawler = new Crawler($html);  echo $html;  ?gt;  

Я хочу получить scrapdomain.com получите ресурсы и загрузите размещенные на cdn изображения, которые у него есть

Комментарии:

1. Похоже, вы знаете проблему и большую часть решения. Вам нужно будет загрузить HTML, затем загрузить ресурсы с поддельными/поддельными заголовками, а затем переписать ранее загруженный HTML, чтобы указать на эти ресурсы.

2. Как мне это сделать?

3. Вам нужно будет поискать несколько руководств по очистке экрана. Вы загружаете example.com/index.php, и то же самое, что и index.html. Затем вы анализируете это, находите cdn.example.com/style.css, загрузите и сохраните локально, затем обновите index.html чтобы указать на это. Повторите с каждым ресурсом.

Ответ №1:

Все, что мне нужно было сделать, чтобы получить контент, размещенный на CDN, внутри очищенного html, — это использовать функцию file_get_content и установить поток ссылок для загрузки данных без внутренней жратвы, так как я получал файлы css и изображений