- ベストアンサー
telnet で web データを取得できない理由と解決策
- telnet を使用して web のデータを取得しようとしていますが、動作しない理由を調べてください。
- Linux 環境で telnet を使用して web データを取得しようとしていますが、接続ができずにエラーが発生します。
- telnet コマンドを使用して web データの取得を試みましたが、接続が確立できずに失敗します。なぜでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最後に待つ必要があります。今のままだと、最後の「echo」で空行を出力したあと、すぐにパイプ入力元の「(sleep 3…echo;)」の実行が終了します。そうすると、そこで入力が途切れたtelnetは即座に実行を終了させてしまうのです。 あと、 ・最初に3秒待つ必要はありません。 ・Host: ヘッダは出力しておいた方が良いです。(質問者さんが挙げたgoogle も、Hostヘッダ無しだと 302 が返ってきます) ですので、まとめると (echo "GET / HTTP/1.0"; echo "Host: www.google.co.jp"; echo; sleep 3) | telnet www.google.co.jp 80 とすればうまくいきます。 (ただし、データ量が多く取得に3秒以上かかる場合は、sleepの時間を増やさないと、途中で終わってしまうことになります)
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
telnetにリダイレクトは使えません。他の手段を使ってください。 wget http://www.google.co.jp/ とか。 bashだと、リダイレクトを使って #!/bin/bash exec 3<> /dev/tcp/www.google.co.jp/80 echo GET / HTTP/1.1 >&3 echo Host: www.google.co.jp >&3 echo Connection: close >&3 echo >&3 cat <&3 とかも出来ます。 どうしてもtelnetをコントロールしたいのなら、expectというコマンドを使います。
お礼
そんな方法があるんですね! やっぱり質問してよかったです。 今後、参考にさせていただきたく思います。 教えていただき、ありがとうございました。
お礼
さっそく試して、うまくいきました。 ありがとうございます。 最初の sleep がいらなくて、最後に必要とはびっくりでした。