2016-06-24 50 views
-1

我正在使用ruby telnet库发出HTTP请求(http://127.0.0.1:3000/test),但我无法向我的服务器发出http请求。Ruby远程登录:如何使用telnet发送http请求

下面是我努力

require 'net/telnet' 
webserver = Net::Telnet::new('Host' => '127.0.0.1', 'Port' => 3000, 'Telnetmode' => false) 
size = 0 
webserver.cmd("GET/HTTP/1.1\nHost: 127.0.0.1/test") do |c| 
print c 
end 

请让我知道自己做错了什么我做这里的代码。

+2

在任何情况下,'telnet'都是说HTTP的错误工具。唯一可以远程接受的地方是在提供大部分空白套接字的命令行中使用'telnet'命令(但并不完全,它仍会在边缘情况下断开)。如果您打算讲原始HTTP,请改用TCP套接字。 –

+0

这是[XY问题](http://meta.stackexchange.com/q/66377/153968)。为什么要使用Telnet而不是HTTP? Telnet会带你一个兔子洞,而HTTP会和HTTP服务器很好地协作。 –

回答

1

您需要结束与一个回车符和行结束你输入HTTP,否则HTTP服务器会等待更多标题:

webserver.cmd("GET /test HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n") do |c| 
    print c 
end 

但远程登录还真是不使用正确的事情(除非你只是试验)。如果你想为真实世界的程序发出HTTP请求,你应该使用正确的HTTP库(至少net/http,或者类似于Faraday会更好)。 HTTP看起来很简单,但是有许多隐藏的复杂性,这意味着从头创建一个编写器/解析器是很多工作。

+0

我试了一下,但是打到服务器的请求是127.1.0.1/,而不是127.0.0.1/test。它不起作用 –

+1

这就是为什么你不应该使用telnet - 你的HTTP格式不正确。 'Host'头文件不应该包含一个路径,它应该在GET之后。我已经更新了答案。但是不要为此使用telnet! –

+1

标题行必须以'\ r \ n'结尾,而不仅仅是\ n。而且,标题必须以一个空行结束,即GET请求(不包含请求主体)始终以'\ r \ n \ r \ n'结尾。 –