如何在 Telnet 中创建 HTTP 请求

How to create a HTTP Request in Telnet

我有兴趣将 HTTP 请求脚本编写到我编写的监听 Web 服务(用于测试目的)。我想在 Powershell 中执行此操作。通过 telnet 发起 HTTP 请求非常简单。

telnet google.com 80

然后,建立套接字后,我可以输入以下 HTTP 动词和文件:

GET /search?q=test

这相当于执行 google 搜索词 "test"。伟大的!但是,如果我想做一些更有趣的事情,我需要提供更详细的 HTTP 请求 Header。我正在尝试做一些与此处找到的示例非常相似的事情:http://blog.tonycode.com/tech-stuff/http-notes/making-http-requests-via-telnet

按照作者在上一个站点的示例,我创建了一个包含以下内容的本地文件:

echo "open  "
sleep 2
echo "GET  HTTP/1.0"
echo "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"
echo "Host: "
echo
echo
sleep 2

(这类似于自定义 HTTP 请求 Header 我想用它来测试我自己的网络服务)

然后我将此文件保存为 "getpage"(我也尝试将其保存为 "getpage.sh")。我继续按照作者的示例并尝试将之前的文件通过管道传输到 Powershell:

的 telnet
./getpage tonycode.com 80 tonycode.com /| telnet

但是,Powershell 返回以下错误:

Cannot run a document in the middle of a pipeline: ~\Desktop\getpage.
At line:1 char:1
+ ./getpage tonycode.com 80 tonycode.com /| telnet
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (~....Desktop\getpage:String) [], RuntimeException
+ FullyQualifiedErrorId : CantActivateDocumentInPipeline

我在 Powershell 中输入 $PSVersionTable 并确认我使用的是 Powershell 4.0 版。我开始 运行 没主意了。我浏览了有关通过 telnet 的 http 请求的 Whosebug 论坛,但我还没有找到通过 telnet 传入 pre-formated http header 来发送自定义 HTTP 请求 Header 的好方法shell 管道。我不能真正在 telnet 中输入整个 Http 请求,因为 1) 这违背了编写此类脚本的目的,以及 2) 在我完成输入完整的 Http Header.有没有人对我如何在 PowerShell 中完成此操作有任何建议?我已经可以在 Firefox 中编写和发送自定义 Http Headers,这让生活变得更轻松。如果可能的话,我只想在 Powershell 中编写脚本。提前致谢。

使用 telnetHTTP 交谈在过去可能是 "cool"。但是现在没有人应该这样做。特别是当需要的不仅仅是一个微不足道的 GET 时。

您应该为此使用真正的库,例如 libcurl 或您的开发环境中可用的任何库。

备注:

  • HTTP/1.0 现在被很多网站屏蔽了。您可能应该使用 HTTP/1.1.
  • HTTP/2 是二进制协议。使用此协议无法使用 telnet 或您可能已经阅读过的任何 "text" 方法。

I am interested in scripting a HTTP Request to a listening web service I wrote (for testing purposes). I want to do this in Powershell.

那就别管 telnet :)

PowerShell(v3+) 具有内置 cmdlet:

或者您可以使用 System.Net.Sockets.TcpClient

System.Net.WebClient

PS: