如何通过终端访问网页?

如何通过终端访问网页?

我正在测试 Apache 服务器。通常我会x.x.x.x/directory/index.php在 Firefox 中打开,然后阅读httpd/error_logs并排除故障。

我的问题是,如果我的测试系统上没有 Web 浏览器(例如 Chrome/Firefox),该怎么办?我该如何通过终端进行等效测试?我试过了,ping x.x.x.x/directory/index.php但不行。

答案1

我的问题是,如果我没有打开 Chrome/Firefox 怎么办?我如何通过终端进行等效测试?我试过了,ping x.x.x.x/directory/index.php但不起作用。

使用ping永远不会工作。它ping所做的只是从网络地址发送/接收 ICMP 数据包。因此,在您的示例中,您唯一可以“ping”的是ping x.x.x.xURL 的其余部分(/directory/index.phpping在尝试解析所有的URL 就像主机名一样。错误可能类似于:

ping: cannot resolve x.x.x.x/directory/index.php: Unknown host

但对于您正在寻找的特定类型的 Web 服务器测试/调试,我通常使用curl但具体来说,我使用的curl -I -L只会返回基本响应标头并遵循服务器可能已设置的任何位置重定向;标志-I告诉curl仅显示标头,-L标志告诉curl遵循它遇到的任何服务器重定向。

例如,如果我curl -I -L在 上运行此命令google.com

curl -I -L google.com

我收到以下响应标头:

HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 24 Aug 2015 02:16:32 GMT
Expires: Wed, 23 Sep 2015 02:16:32 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

HTTP/1.1 200 OK
Date: Mon, 24 Aug 2015 02:16:32 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1440382592:LM=1440382592:V=1:S=5ToXkoBHyK2BAjyf; expires=Thu, 31-Dec-2015 16:02:17 GMT; path=/; domain=.google.com
Set-Cookie: NID=70=VKM1D8HeCMlye1YjMDYSqPlyIpPHKkitAor--wiqYznamENfNig69ZBW5oBgIR7wOFzVaUB6i4WKj-tqa2WcqbOCeVTc0hB4xQWQzBxpNazPp_20dBiU4in0wIop8mhz; expires=Tue, 23-Feb-2016 02:16:32 GMT; path=/; domain=.google.com; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding

请注意,返回了两个标头:

  • HTTP/1.1 301 Moved Permanently
  • HTTP/1.1 200 OK

这不仅对 Apache 服务器测试有用,而且对调试也很有用mod_rewrite重写规则等等。

这种curl -I -L方法比使用 Chrome 或 Firefox 等可视化浏览器更有用、更高效,因为这些程序旨在通过缓存内容来优化浏览速度。这意味着您可以在一秒钟内对 Apache 服务器进行调整,但可视化浏览器不一定会立即显示更改,除非您清除缓存或强制页面重新加载几次。它向curl -I -L您展示了服务器当时响应您的请求所做的事情,这正是您在调试服务器配置时想要/需要的。

答案2

您想要的命令是curlwget(取决于您的个人偏好)。这些命令向服务器发出 HTTP 请求。它们不适合模拟整个页面的加载(默认情况下,它们不会加载 HTML 页面引用的资产,并且它们根本无法执行 javascript 或与页面交互),但听起来您并不追求任何高级功能。因此, 或 几乎curl肯定wget会适合您。

答案3

@womble 是对的。但是,如果您没有curlwget,则可以使用 telnet:

telnet x.x.x.x 80
GET /directory/index.php HTTP/1.1
Host: x.x.x.x

然后再按Enter一次(结束标头),您将获得原始 HTML。如果服务器使用 keepalive,您可能需要按Ctrl+ D(Unix)或Ctrl+ (Windows)退出。Z

答案4

您可以使用 OpenSSL 发出 GET 请求:

openssl s_client -quiet -connect cdn.sstatic.net:443 <<eof
GET /stackexchange/js/universal-login.js HTTP/1.1
Connection: close
Host: cdn.sstatic.net

eof

请注意,您也可以使用“HTTP/2”,但要小心,因为某些服务器(例如 github.com)不支持它。

相关内容