2016-06-24 56 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'結尾。 –