通过IP访问网站子页面

通过IP访问网站子页面

我正在编写一个使用 CURL 从网站上抓取数据的 php 应用程序。但是使用 curl 加载网站所需的时间非常非常慢。比在 Chrome 中加载所需的时间慢很多,尽管 Chrome 会加载很多其他内容,例如电子表格和图像,而 php 应用程序不会。

无论如何,我读到 curl 可能存在 DNS 查找问题,因此通过 IP 访问可能会快得多。

但我不确定该怎么做。

让我们以 Google 为例。我可以打开命令提示符并执行“ping www.google.com”。它回答:

Pinging www.google.com [74.125.232.114] with 32 bytes of data...

那么我可以使用该 IP 地址,这可行,但如果我想访问例如:www.google.com/doodles

如果我在 ping 时尝试输入该地址,它会说找不到主机,而且这样做http://74.125.232.114/doodles也不起作用。

(Error: Not Found The requested URL /doodles was not found on this server.)

那么我该如何通过 IP 来访问呢?

答案1

您正尝试通过 IP 访问基于 VirtualHost 的网站。问题在于 curl 无法将其尝试访问的主机名提供给网络服务器,因此网络服务器不知道要提供哪个页面(google.com 可能也托管 gmail.com,但它不知道要给您什么,因为 curl 不会询问)。

要让 curl 使用主机名,您可以/etc/hosts使用以下信息修改文件:

74.125.232.114 google.com

(在 Windows 上,您可以在 中找到此文件C:\Windows\System32\Drivers\etc\hosts

如果你让 curl 向 example.com 发出请求,你的操作系统会在文件中找到 example.com /etc/hosts,甚至不会尝试进行 DNS 查找,这将是很多快点。


话虽如此,如果您修复 DNS 设置,情况会好得多。您是否尝试过/etc/resolv.conf使用提供商的名称服务器(或 Google Public DNS)修改该文件?

nameserver 8.8.8.8
nameserver 8.8.4.4

答案2

如果 DNS 响应时间很长,您应该修复网络中的 DNS 设置。查看/etc/resolv.conf并检查列出的名称服务器是否仍然可用。如果没有,请添加一个可用的 DNS 服务器(在顶部)。例如,您可以使用 google 的 DNS 服务:

nameserver 8.8.8.8

如果您出于任何原因需要慢速 DNS 服务器,这可能是因为您的应用程序正在使用互联网上不可用的内部 DNS 名称,那么您仍然可以修改文件/etc/hosts并在那里添加主机名74.125.232.114

74.125.232.114 www.google.com

中具有常见设置/etc/nsswitch.conf,系统将/etc/hosts在执行 DNS 请求之前使用。

答案3

使用 -L 进行重定向(因为curl www.google.com页面已被移动),

并且已经提到,当通过 IP 执行此操作时,主机头不会被填写。

那么,指定主机头怎么样?

curl -L -H “主机:www.google.com” 173.194.34.115/doodles

相关内容