0

次の擬似コードに示すように、クライアント入力を取得したい Sinatra アプリがあります。

get '/foo' do
    "doing some stuff"
    foo = getInputFromClient
    foo
    "continuing to do more stuff"
    foo = getInputFromClient
    foo
    "done"
end

これは、クライアント側で見たい出力です。

curl http://127.0.0.1:4567/foo #start the request
doing some stuff
#Somehow submit "shoop" to Sinatra
shoop
continuing to do more stuff
#Somehow submit "woop" to Sinatra
woop
done

これを 2 つの curl 呼び出しに分割することはできません。どうすればこれを達成できますか? そもそもシナトラを使うべきではないのですか?ソケットに切り替える必要がありますか?

関連していると思われるこれらの他の 質問を読みましたが、それが私に当てはまるかどうかを確認するには、彼らが話していることに十分に精通していません. 私の場合の他の質問や、Google へのいくつかのキーワードを簡略化していただければ幸いです。

4

1 に答える 1

1

通常、次のように書きます。

get '/foo' do
  ...do something...
  "done doing foo"
end

get '/foo2' do
  ...do something...
  "done doing foo2"
end

get '/foo3' do
  ...do something...
  "done doing foo3"
end

クライアントには、次のような接続ハンドシェイクが表示されます。

  1. に接続し/fooます。
  2. 「foo の実行が完了しました」という応答を取得します。
  3. に接続し/foo2ます。
  4. 「foo2 の実行が完了しました」という応答を取得します。
  5. に接続し/foo3ます。
  6. 「foo3 の実行が完了しました」という応答を取得します。

クライアント側とサーバー側の両方で、ロジックを処理するためのコードを作成する必要があります。接続の途中でメッセージを cURL に送り返したり、さらに情報を返したり、さらにデータを要求したり、それを返したりすることはできません。これは、cURL の仕組みでも、HTTP プロトコルの仕組みでもありません。

ブラウザでさまざまなテクノロジを使用してやり取りすることは可能ですが、cURL はブラウザではありません。

于 2013-10-17T06:27:59.777 に答える