所以,我很感兴趣,是否可以在 Linux 中通过命令行发送无效的 HTTPS 请求,以接收服务器的“错误 400”页面?
通过告诉“telnet”连接到端口 80 上的某个服务器并输入无效的 HTTP 请求(例如,声称您支持 HTTP/1.1 但不提供 Host 标头),可以使用“telnet”生成无效的 HTTP 请求。
但是可以用 HTTPS 做同样的事情吗?据我所知,你不能通过“wget”来做到这一点,因为“wget”应该总是生成语法上有效的 HTTP 或 HTTPS 请求。您无法通过“ssh”执行此操作,因为 SSH 协议与 HTTPS 不同,它将通过“连接重置”错误而不是“400 错误请求”被拒绝。那么,有办法做到这一点吗?
答案1
您可以用来curl
发送 HTTP(S) 请求。
要删除或拥有自定义标头,-H
可以使用该选项。
要发送空标头,您可以执行以下操作:
curl URL -H 'Host:'
例子:
$ curl https://fedoramagazine.org/ -H 'Host:'
<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
仅获取响应头:
$ curl -s -o /dev/null -D - https://www.imdb.com/ -H 'Host:'
HTTP/2 400
server: CloudFront
date: Fri, 24 Apr 2020 15:52:42 GMT
content-type: text/html
content-length: 915
x-cache: Error from cloudfront
答案2
无论如何,我自己已经弄清楚了。以下是生成对 github.com 无效请求的命令(例如):
openssl s_client -servername github.com -connect github.com:443
如果您在那里输入语法无效的 HTTP 请求,您会得到:
<html>
<head>
<meta content="origin" name="referrer">
<title>Bad request · GitHub</title>
<meta name="viewport" content="width=device-width">
<style type="text/css" media="screen">
body {
background-color: #f6f8fa;
color: rgba(0, 0, 0, 0.5);
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;
font-size: 14px;
line-height: 1.5;
}
.c { margin: 50px auto; max-width: 600px; text-align: center; padding: 0 24px; }
a { text-decoration: none; }
a:hover { text-decoration: underline; }
h1 { color: #24292e; line-height: 60px; font-size: 48px; font-weight: 300; margin: 0px; }
p { margin: 20px 0 40px; }
#s { margin-top: 35px; }
#s a {
color: #666666;
font-weight: 200;
font-size: 14px;
margin: 0 10px;
}
</style>
</head>
<body>
<div class="c">
<h1>Whoa there!</h1>
<p>You have sent an invalid request. <br><br>
Please do not send this request again.
</p>
<div id="s">
<a href="https://support.github.com">Contact Support</a> —
<a href="https://githubstatus.com">GitHub Status</a> —
<a href="https://twitter.com/githubstatus">@githubstatus</a>
</div>
</div>
</body>
</html>