寻找一个可以让我手动发出 HTTP 或 HTTPS 请求的工具(可能在 Linux 上)

寻找一个可以让我手动发出 HTTP 或 HTTPS 请求的工具(可能在 Linux 上)

我正在寻找一个可以让我手动发出 HTTP 或 HTTPS 请求的工具(可能在 Linux 上)。我说的手动,其实是这样的:我应该能够给它提供一个文本文件,如下所示

POST /foo HTTP/1.1
Host: www.example.com
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Content-Type: text/plain
Content-Length: 11

Hello world

以及目标 URL(www.example.com/foo),并将请求发送到该 URL。最多,如果Content_Length标头是自动计算的,那将很有用。

我可以使用 Python 中的 httplib 之类的库来编写这样的工具,但我需要它的原因主要是当这些库出现问题时进行手动调查。

答案1

获得有一个 --post-file 选项,它应该适合您。

编辑:另外,还有氮碳,其使用方式与 Randolf Richardson 的 telnet 建议类似,只不过它还支持 SSL/HTTPS:

ncat -C --ssl www.example.com 443 < input.txt > output.txt

答案2

对于 HTTP(不是 HTTPS),想到的“wget”命令的一个替代方法是使用 telnet,如下所示:

  • telnet 主机名 80 <输入.txt>输出.txt

文件“input.txt”是您希望提供给主机的预设命令列表主机名文件“output.txt”将存储响应。

答案3

您可以使用 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)不支持它。

答案4

我很惊讶没有人提到卷曲.它是由确切地满足您的所有需求。它几乎适用于任何平台(包括 Windows)。

因此,对于您的示例,您要做的就是:

curl -H 'Content-Type: text/plain' -d 'Hello World' www.example.com

从 Wireshark 捕获的信息如下:

POST / HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
Host: www.example.com
Accept: */*
Content-Type: text/plain
Content-Length: 11

Hello world

如果您想做各种事情(即更改用户代理等),您可以轻松地进一步修改标题。

编辑:没有注意到“来自文件”的要求。您也可以这样做,无论是纯 ascii 还是二进制文件。您只需使用 @ 符号指定文件名即可

-d @/tmp/HelloWorldFile

相关内容