2016-06-24 6 views
-1

私はRuby telnetライブラリを使ってHTTPリクエスト(http://127.0.0.1:3000/test)を取得していますが、私のサーバにHTTPリクエストを取得できません。以下はRuby Telnet: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)です。なぜあなたはHTTPの代わりにTelnetを使いたいのですか? 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 

しかし、telnetは本当に使うには正しいことではありませんただ実験している)。実際のプログラムに対してHTTPリクエストを作成したい場合は、適切なHTTPライブラリ(net/httpを最低限使用するか、Faradayなどの方が良いでしょう)を使用してください。 HTTPは単純なようですが、最初からライター/パーサーを作成することは多くの作業であることを意味する多くの隠された複雑さがあります。

+0

私はそれを試しましたが、サーバーに当たるという要求は127.0.0.1/であり、127.0.0.1 /テストではありません。それが動作しない –

+1

これは、あなたがHTTPを使用していない理由です。 'Host'ヘッダにはGETの後に来るべきパスが含まれてはいけません。私は答えを更新しました。しかし、これにはtelnetを使わないでください! –

+1

ヘッダー行は '\ n \ 'だけでなく' \ r \ n'で終わらなければなりません。また、ヘッダーは1つの空白行で終わらなければなりません。つまり、リクエスト本体なしのGETリクエストは常に '\ r \ n \ r \ n'で終わります。 –

関連する問題