【问题标题】:How to set referer Header in Guzzle and get CDN Content如何在 Guzzle 中设置 referer Header 并获取 CDN 内容
【发布时间】:2023-04-06 06:39:01
【问题描述】:

我想抓取一个网站,并且正在使用 guzzle 7.4 和 Symfony Dom Crawler

我成功检索了 HTML 数据但是网站使用 CDN 托管一些资源并且它们没有加载,因为没有发送标头来获取这些资源

下面是获取html的代码

<?php

require "vendor/autoload.php";

use Symfony\Component\DomCrawler\Crawler;

// Url
$url = 'scrapingdomain.com';
$headers = [
    'referer' => 'examplescrapingdomain.com'
];

$client = new \GuzzleHttp\Client([
    'headers' => $headers
]);

// go get the data from url
$response = $client->request('GET', $url);
$html =  ''.$response->getBody();
$crawler = new Crawler($html);

echo $html;

?>

如果我直接访问 CDN 并设置引用标头,我会得到 200 的响应

以下代码

<?php

require "vendor/autoload.php";

use Symfony\Component\DomCrawler\Crawler;

// Url
$url = 'examplecdnresource.com/Images.png';
$headers = [
    'referer' => 'examplescrapingdomain.com'
];

$client = new \GuzzleHttp\Client([
    'headers' => $headers
]);

// go get the data from url
$response = $client->request('GET', $url);
$html =  ''.$response->getBody();
$crawler = new Crawler($html);

echo $html;

?>

我想获取 scrapdomain.com 获取资源并下载它拥有的 cdn 托管图像

【问题讨论】:

  • 听起来您知道问题所在和大部分解决方案。您需要下载 HTML,然后下载带有欺骗/伪造标头的资源,然后重写您之前下载的 HTML 以指向这些资源。
  • 我该怎么做?
  • 你需要寻找一些关于屏幕抓取的教程。你下载example.com/index.php,和index.html一样。然后你解析它,找到 cdn.example.com/style.css,下载并保存在本地,然后更新 index.html 以指向它。对每个资源重复。

标签: php symfony web-scraping web-crawler guzzle


【解决方案1】:

在抓取的 html 中获取 CDN 托管内容所需要做的就是使用 file_get_content 函数并设置引用流来下载数据,因为我正在获取 css 和图像文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2022-08-04
    • 2015-03-29
    • 2018-01-24
    • 1970-01-01
    相关资源
    最近更新 更多