私は端末に似ていますが、httpを介してサーバーと「会話」できることを探しています。このような:
$ connect http://myserver.com
Welcome to myserver.com
Options
A - Fribble the obsticator
B - List Frogits
C - Show the log
Q - Quit
$ A
Obsticator fribbled
blah blah
blah
$ C
Log file
...
$ Q
Bye
私はhttpを介して実際のUnixコマンドラインをトンネリングする賢い方法を探していません。テキストモードのブラウザでもありません。これは、この方法でアクセスされていることを知り、HTMLではなくプレーンテキストを返す単純なカスタムサーバーと通信します。
ただし、他のプロトコルではなくhttpを介して行う必要があります。カールのような命令をしたくない
$ curl http://myserver.com?opt=A
URLを一度キャプチャできるはずです。コマンドをCGIパラメーターに変換する操作はユーザーに透過的でなければなりません。
更新:また、単一の接続でこの会話を開いたままにしてもかまいません。送受信された各コマンドは、個別のhttp要求にすることができます。 (実際、これはサーバーがより単純になるのでより良いです)
アップデート2:私がこれをしたい理由はPython Hug(http://www.hug.rest/)しかし、ブラウザの代わりにコマンドラインから直接いくつかのタスクにアクセスするのは便利です。
複雑さを追加する代わりに(サーバーで異なるプロトコルを使用して別々の対話リスナーを管理する)、単純なコマンドラインクライアントを使用して標準のhttp要求を介してAPIと対話できます。
では、そんなこともありますか? (席に座って書く前に。)
ベストアンサー1
Telnet を使用してサーバーに接続できます。ここでは、HTTP仕様の制約内でそうする必要があることがわかります(ここではWebサーバーを使用して通信しようとしているとします)。
例えば仕様 https://www.w3.org/Protocols/rfc2616/rfc2616.txt
状態:
ソースサーバーは、次の例外を除いて、すべての応答に日付ヘッダーフィールドを含める必要があります。
これは、Telnet経由のWebサーバーへの「会話」の端末出力です。
ネットワークサーバーの構成によって、TCP接続がアクティブになっている期間、つまりサーバーが「非アクティブ」であるため、TCP接続を切断する前に正しい形式のHTTP要求を入力する必要がある期間が決まります。しかし、これは設定可能です。
タイムアウト前に各要求を入力すると、実際には多数のHTTP要求と応答が単一の連続したTCP接続を介して送信されます。
% telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1 <---- this in where you type characters "interactively"
Host: localhost <---- this in where you type characters "interactively"
<-- per the HTTP specification this has to be an emtpy line
to tell the server you are done with your "message"
HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Sat, 17 Sep 2016 07:38:08 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
45d
<html>
[truncated ... ]
</html>
0
GET / HTTP/1.1 <-- now you are back at prompt
Host: localhost Note: you need to enter the `Host` header if you are talking
to a webserver
HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Sat, 17 Sep 2016 07:41:07 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
45d
<html>
[truncated]
明らかに、より明確な「会話」を得るには、要求を処理するWebサーバーまたはアプリケーションの出力をクリーンアップする必要があります。
nginx はttp_core_module
以下を使用して基本タイプを管理します。
http://nginx.org/en/docs/http/ngx_http_core_module.html#default_type
タイトルを追加するには、次を使用できます。http_headers_module
http://nginx.org/en/docs/http/ngx_http_headers_module.html