我使用 Ctrl+u 和curl 得到一个不同的 html 页面

我使用 Ctrl+u 和curl 得到一个不同的 html 页面

当我访问此网页时(https://imgur.com/user/Ultraruben/subscribed例如)然后按Ctrl+u,我会得到一个网页。当我尝试通过命令行提取 html 时,curl <url>curl -L <url>得到了另一个。 lynx -dump <url>也不起作用(没有javascript)。

我需要通过命令行(使用任何有效的工具),就像我通过浏览器使用Ctrl+u.

这是我通过 Opera 浏览器得到的:https://justpaste.it/42ci1 这是使用curl 时的情况:https://justpaste.it/9oy3g

答案1

网站对所看到的客户类型做出不同的内容是很常见的。

其中一些是出于好意:例如,一些网站不遗余力地支持非常旧的手机或 Windows PC。从安全角度来看,您希望告诉 Internet Explorer 5 用户他们需要更新 - 但您的工作可能是帮助向公众提供健康信息,而不是告诉没有钱的人他们需要购买一台新笔记本电脑。

有时,您需要通过一个特别古怪的网站来支持旧游戏设备,以使其浏览器满意,或者提供针对屏幕优化的网站版本。

不管怎样,这很可能就是这里发生的事情;你的curl发送“嘿,我是curl”,网络服务器会响应一个专门针对自动化工具而不是浏览器的页面。

因此,首先:检查如果您告诉curl 使用与主浏览器相同的用户代理,问题是否解决。也许这已经解决了问题。

如果您说 lynx 不起作用是因为它不执行 JavaScript,那么您需要一个能够执行现代浏览器执行的所有 JavaScript 功能的东西。这意味着它需要是一个现代浏览器。有多种方法可以从命令行操纵浏览器。本质上,你正在寻找网络驱动程序

如果你不写几行脚本,这是行不通的。Mozilla 的 WebDriver 文档有一个示例可以帮助您入门。在获取源代码之前,您需要添加一些等待(加载完成时,再加上几分之一秒)以允许 JavaScript 完成。该示例通过等待特定元素开始存在来实现这一点。

答案2

使用选项-H设置User-Agent标头

如果您使用Firefox,您可以打开网络分析器并右键单击获取请求。接下来从上下文菜单中选择“复制为 cURL 地址”。对于 URL cr.yp.to,您将得到以下命令:

curl 'http://cr.yp.to/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' -H 'Accept-Language: de,en-US;q=0.7,en;q=0.3' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1'

相关内容