我想知道如何继续排除对网络服务器的 curl 请求不起作用的原因。我不是在寻求依赖于我的环境的帮助,我只是想知道如何收集有关通信的确切部分失败、端口号等的信息。
chad-integration:~ # curl -v 111.222.159.30
* About to connect() to 111.222.159.30 port 80 (#0)
* Trying 111.222.159.30... connected
* Connected to 111.222.159.30 (111.222.159.30) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0 OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
> Host: 111.222.159.30
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 111.222.159.30 left intact
curl: (52) Empty reply from server
* Closing connection #0
Run Code Online (Sandbox Code Playgroud)
所以,我知道空响应意味着 curl 没有从服务器得到任何响应。没问题,这正是我想要弄清楚的。
但是我可以从这里的 cURL 获得哪些更具体的信息?
它能够成功“连接”,所以这不涉及一些双向通信吗?如果是这样,那么为什么响应也没有来?请注意,我已验证我的服务已启动并返回响应。
请注意,我对这个级别的网络有点陌生,所以请随意提供一些一般性的介绍材料。
小智 17
您可能需要从服务器端而不是客户端来解决这个问题。我相信您将“空响应”与“无响应”混淆了。它们的意思并不相同。您可能会收到不包含任何数据的回复。
您可以通过简单地使用 telnet 而不是通过 curl 来测试:
telnet 111.222.159.30 80
Run Code Online (Sandbox Code Playgroud)
连接后,粘贴以下内容(取自 curl 输出):
GET / HTTP/1.1
User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0 OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
Host: 111.222.159.30
Accept: */*
Run Code Online (Sandbox Code Playgroud)
您应该看到与 curl 看到的完全一样的响应。
您收到空回复的一个可能原因是您试图访问一个基于名称的虚拟主机的网站。如果是这种情况,根据服务器配置(您尝试访问的站点恰好配置为默认站点),如果不做一点工作,您将无法通过 IP 地址访问该站点。
您可以通过简单地更改上面的“主机”行在客户端进行测试;将 www.example.com 替换为您要访问的站点:
GET / HTTP/1.1
User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0 OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
Host: www.example.com
Accept: */*
Run Code Online (Sandbox Code Playgroud)
Curl 很好,但在出现问题时不会给出太多反馈。(如您所知) wget 可能会为您提供更多信息,但正如 yoonix 所提到的,服务器端(即网络服务器错误日志)是查看的地方。
wget -S -O /dev/null http://www.example.com
Run Code Online (Sandbox Code Playgroud)
您也可以设置主机名
wget -s -O /dev/null --header="Host: foo.bar" http://www.example.com
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
147954 次 |
最近记录: |