如何在Telnet中创建HTTP请求

时间:2015-12-23 21:24:29

标签: sockets http powershell http-headers http-request

我感兴趣的是将HTTP请求编写到我编写的侦听Web服务(用于测试目的)。我想在Powershell中这样做。通过telnet发起HTTP请求很容易。

telnet google.com 80

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

GET /search?q=test

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

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

echo "open $1 $2"
sleep 2
echo "GET $4 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: $3"
echo
echo
sleep 2

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

然后我将此文件保存为" 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请求的StackOverflow论坛,但是我还没有找到一种通过telnet发送自定义HTTP请求头的好方法,方法是通过shell管道传入预先格式化的http头。我无法在telnet中真正键入整个Http请求,因为1)违背了编写这些类型的脚本的目的,2)从telnet按Enter键提交当前请求,然后才能完成键入完整的Http Header。有没有人有任何建议如何在PowerShell中实现这一目标?我已经可以在Firefox中编写和发送自定义Http Headers,它可以让生活更轻松。如果可能的话,我想在Powershell中编写脚本。提前谢谢。

2 个答案:

答案 0 :(得分:2)

使用telnetHTTP进行对话可能已经很酷了#34;在过去。但是现在没有人应该这样做。特别是当需要的不仅仅是一个微不足道的GET时。

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

注意:

  • 现在许多网站都阻止了HTTP / 1.0。您应该使用HTTP / 1.1。
  • HTTP / 2是二进制协议。使用telnet或其他"文字"您可能已阅读过的方法无法使用此协议。

答案 1 :(得分:2)

  

我感兴趣的是将HTTP请求编写到我编写的侦听Web服务(用于测试目的)。我想在Powershell中做到这一点。

然后单独留下telnet:)

PowerShell(v3 +)具有内置cmdlet:

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

System.Net.WebClient

PS:

Lee Holmes in action :D