【问题标题】:fetch image and css files by curl proxy in php通过 php 中的 curl 代理获取图像和 css 文件
【发布时间】:2011-09-03 16:01:14
【问题描述】:

我正在使用 curl 库来查询代理服务器。 我只从请求的 URL 接收 HTML 源代码,并且此代码不会检索图像和 CSS 文件以及其他网页文件。请给我一个解决这个问题的想法。 我的代码:

<?php
$url = 'http://google.com';
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '192.168.1.200:3128');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADER, 0);
$data=curl_exec ($ch); 
curl_close($ch);
echo '<br />';
print_r($data);
?>

【问题讨论】:

  • curl 做不到,你需要解析 HTML 并单独抓取所有项目

标签: php css curl proxy


【解决方案1】:

穆斯塔法,

好吧,要解决这个问题,我首先会尝试准确了解您的浏览器在您访问网页时在做什么。以下是您在浏览器的地址栏中键入“http://www.google.com”时发生的情况的一个非常基本的概述。

  1. 您告诉浏览器加载 URL。
  2. 然后浏览器向您提供的地址发出请求(非常类似于发出“cURL 请求”)。
  3. 该页面的内容(在本例中为纯 HTML)将返回到您的浏览器。
  4. 然后,您的浏览器会读取 HTML 文件,直到找到指向图像、JavaScript 文件、CSS 文件等的链接...然后对这些外部资源中的每一个进行另一个查询。
  5. 在发生这些请求时,您的浏览器会继续读取 HTML 文件,以便呈现页面内容。
  6. 下载所有外部内容并完全呈现 HTML 文件后,您将看到浏览器在屏幕上绘制的完整网页。

所以,既然我们已经解决了这个问题,那么通过代理完全加载页面及其所有资源比仅下载 HTML 文件要复杂得多。

要完全加载页面,您不仅需要解析 HTML 以检索所有这些外部文件并将它们存储在您的服务器上(暂时),还需要重写原始 HTML 文件链接到您保存到服务器的外部文件(CSS、JS、图像)。这样,您的浏览器只需向运行 cURL 脚本的服务器发出请求。

个人建议:不要重新发明轮子。尝试一些现有的脚本来帮助你。 PHP Web Proxy

【讨论】:

  • 请告诉我如何使用 PHP WEB PROXY,我没有找到任何用户手册或示例代码。
【解决方案2】:

cURL 是纯文本的。通常,它会下载 URL 的来源,仅此而已。

您需要使用正则表达式或类似工具解析源代码,以找到源文本中显示的图像和其他资源。

【讨论】:

  • 使用正则表达式解析 HTML 会使小猫从婴儿那里偷走糖果。建议使用 HTML 解析器,例如 DOMDocument。
  • @onteria 那些该死的小猫。我不是 cURL 大师,所以我只是提出了我所知道的“最简单”的方法,不一定是最好的。另外,就在你我之间,如果有人不知道 cURL 不下载图片和 CSS 文件,你认为他们会使用 DOMDocument 吗? ;)
【解决方案3】:

你可以像这样替换src、href语句

   $result = str_replace('src="','src="'.$url.'/',$data);
   $result = str_replace('href="','href="'.$url.'/',$result);

就在打印结果之前

我希望这能解决您的问题

【讨论】:

  • 那么,例如,如果图像文件位于另一台服务器上?
  • 此解决方案的另一个问题:您必须直接访问互联网才能加载图像和 css 文件。
  • 穆斯塔法看这里link
猜你喜欢
  • 2018-06-12
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多