该脚本如何使用 AJAX 从其他站点刮取 HTML,而不需要这些站点上的 CORS 标头?

Posted

技术标签:

【中文标题】该脚本如何使用 AJAX 从其他站点刮取 HTML,而不需要这些站点上的 CORS 标头?【英文标题】:How does this script scrape HTML from other sites using AJAX without requiring a CORS header on those sites? 【发布时间】:2021-06-23 22:00:01 【问题描述】:

有问题的脚本:http://samples.geekality.net/image-fetcher/

您可以单击底部的“查看源代码”以调出所使用的确切 phpjavascript

我使用此脚本的一部分从不同域和服务器上的另一个站点中提取我的站点上的图像。我必须去被刮掉的那个并添加一个 CORS 标头“Access-Control-Allow-Origin”,以允许我的特定域执行 AJAX $.post 并实际接收数据。

上面的脚本不要求任何站点具有 CORS 标头以确保安全。据我所知,我没有做任何不同的事情。

我有一个 html 表单,然后我使用 jQuery 获取字段数据并执行 $.post,其中操作是使用 DomDocument 获取 HTML 的 PHP 文件。然后 PHP 对数据进行排序并回显一个 JSON 对象。然后 jQuery 将其全部排序并显示在页面上。他们正在做同样的事情。

我看不出他们是如何在他们从中抓取图像的网站上解决“Access-Control-Allow-Origin”标题的需求的?

感谢您为此付出的时间和精力!

【问题讨论】:

当您提交带有 URL 的表单时,它会向 samples.geekality.net/image-fetcher/scan.php 发送请求。可能是他们在服务器端使用 cors 绕过。您可以在没有“Access-Control-Allow-Origin”标头的任何地方使用 cors 对 jquery 执行相同操作 【参考方案1】:

我认为是 /image_finder.class.php 中 curl 选项的组合

据我所知,具体来说,是跟随位置。

curl_setopt_array($request, 数组 ( CURLOPT_URL => $url,

                    CURLOPT_RETURNTRANSFER => TRUE,
                    CURLOPT_HEADER => FALSE,
                    
                    CURLOPT_SSL_VERIFYPEER => TRUE,
                    CURLOPT_CAINFO => 'cacert.pem',

                    CURLOPT_FOLLOWLOCATION => TRUE,
                    CURLOPT_MAXREDIRS => 10,
            ));

【讨论】:

以上是关于该脚本如何使用 AJAX 从其他站点刮取 HTML,而不需要这些站点上的 CORS 标头?的主要内容,如果未能解决你的问题,请参考以下文章

对远程站点的本地 AJAX 调用在 Safari 中有效,但在其他浏览器中无效

从响应式站点创建一个应用程序,该应用程序使用返回 html 和 javascript 的 ajax 调用 - 最简单的方法?

从Twitch刮取数据

从 NCBI 书籍部分刮取数据?

Python刮取谷歌财务

使用 Python 从电子商务 Ajax 站点抓取 JSON 数据