【问题标题】:Curl stop browser sending Get Requests卷曲停止浏览器发送获取请求
【发布时间】:2011-10-16 22:41:38
【问题描述】:

我写了这个脚本

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $address);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_COOKIEJAR,$cookieFileLocation);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookieFileLocation);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 25); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);


$response = curl_exec($ch);  

echo ($response);

curl_close($ch);

当我执行脚本时,网站将被加载,但浏览器也会发送其他一些获取请求。如何阻止浏览器发送更多获取请求? 我想关注我写的请求,这样我就可以看到哪个请求加载了网站的哪个部分。首先我只想看看当我发送我写的请求时加载了什么。

【问题讨论】:

    标签: php http curl get


    【解决方案1】:

    我猜你正在尝试做某种代理,使用 curl 来获取其他一些 html 页面,然后将其转发到浏览器上?您将不得不重写该页面中的 HTML、CSS 和 JS,以便对其他资源(图像、字体、flash 等)的所有请求都指向您的服务器和代理脚本。否则,如果您转发的 HTML 包含任何绝对(和/或<base>'d)地址,您将无法阻止浏览器直接访问并获取这些资源。

    【讨论】:

    • 不,我只是想了解 curl 的工作原理。例如我加载一个网站。在站点完全加载之前,有 10 个 http get 请求。现在我想看看哪个请求加载了什么。
    • Curl 只获取您告诉它的内容。如果检索到的 html 包含图像/javascript/flash/java/etc.... curl 不会像普通浏览器那样获取这些。
    • 当我使用上面发布的代码时,整个页面都会被加载。
    • 是的,因为您正在获取页面的 html 并将其发送到浏览器。浏览器自动获取页面中所有引用的资源。如果您不希望浏览器执行此操作,请通过 echo html_entities($response)header('Content-type: text/plain'); echo $response ... 或两者强制它不将页面视为 html。
    【解决方案2】:

    我不完全确定您要达到什么目的,但最好的办法是监控您何时从 cURL 收到请求,一旦成功检索到这些请求,您就可以处理它们。

    这个 cURL 请求只会在脚本加载期间发送一次,因为要发送多次,您需要使用诸如 while 或 foreach 之类的循环来实现此目的。加载提供的 PHP 脚本不会发送其他 GET 请求。

    【讨论】:

    • 但是我看不到已经加载的内容,因为 php 脚本每次都会刷新。例如:我向图片所在的页面发送获取请求。第二个获取请求是获取图像。我只是想获得没有图片的网站,所以我只需要发送一个请求并“取消”对图片的请求。
    • 哦,我明白你的意思了。好吧,我处理这个问题的方法是下载页面一次,然后从收到的 html 代码中删除图像。您可以通过使用 PHP 的 DOMDocument 对象从页面中删除 img 标记来做到这一点。这可能有用:) php.net/manual/en/domnode.removechild.php
    • 我认为这就是你想要做的。无需多次下载页面即可实现...
    • 是的,但是如果有图片、视频和样式表怎么办?在第一次请求后告诉浏览器停止加载页面会更容易。
    猜你喜欢
    • 2022-01-21
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2011-10-28
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多