2015-12-23 116 views
1

我有兴趣将HTTP请求脚本化为我编写的监听Web服务(用于测试目的)。我想在Powershell中执行此操作。通过telnet启动HTTP请求很简单。如何在Telnet中创建HTTP请求

telnet google.com 80 

然后,建立一个socket后,我可以在下面的HTTP动词和文件类型:

GET /search?q=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的:

./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。我开始用尽想法。我通过StackOverflow论坛查看了通过telnet发送的http请求,但是我还没有找到一种好方法,通过telnet通过一个shell管道传递一个预先形成的http头来发送一个自定义的HTTP请求头。我无法在telnet中输入整个Http请求,因为1)这会破坏脚本编写这些事情的目的,2)在完成键入完整的Http标头之前,按下telnet中的Enter键提交当前请求。有没有人有任何建议,我可以在PowerShell中完成此任务?我已经可以在Firefox中编写和发送自定义的Http头文件,并且使生活更轻松。如果可能的话,我只想在Powershell中编写脚本。提前致谢。

+1

'A', 'B' |的foreach对象{$ PSItem} –

+0

PS ......如果你不坚持使用Telnet客户端,有万吨制作exaples的“原始”的HTTP请求与System.Net.Sockets.TcpClient –

回答

2

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:

或者你可以使用系统.Net.Sockets.TcpClient

或者System.Net.WebClient

PS:

Lee Holmes in action :D

+0

谢谢你的所有建议。我一定会尝试其中一些替代方案。我真的很想以旧式的方式来做这件事,主要是为了学习目的,但看起来我可能需要与时俱进,并使用更好的客户。 –

+1

好吧,我发现有点难以在Lee Holmse的脚本中找到我的方式,但它或多或少是你想用telnet实现的......要粘贴截图 –

+0

这太棒了!现在,如果我可以编写整个脚本,那么我不必每次都手动输入Http请求。 –

2

使用telnet说话HTTP过去可能“很酷”。但是现在没有人应该这样做。特别是当需要更多的微不足道的GET时。

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

注:

  • HTTP/1.0由现今许多网站阻止。你应该使用HTTP/1.1。
  • HTTP/2是一个二进制协议。使用telnet或者其他任何你可能已经阅读过的“文本”方法在这个协议中是不可能的。
+0

我很感谢您的反馈。老实说,我最近一直在编写很多客户端服务器应用程序,并且我学到了很多关于套接字的知识,所以我发现telnet非常吸引人。虽然我同意现代有更合适的方法去做这件事。 –

相关问题