2

次のcurl呼び出しがあるとします。

"curl  -v --insecure -X POST -H 'Host: api.test.com' -H 'Tester #{@@test_name}' -d 'token=#{token_raw}' https://teststage.BLAHBLAH:token/terminate"

curl 呼び出しの出力を取得しようとしています。200 OKまたは404 ERRORステータスなど。

だから、もしそうなら:

a = `curl  -v --insecure -X POST -H 'Host: api.test.com' -H 'Tester #{@@test_name}' -d 'token=#{token_raw}' https://teststage.BLAHBLAH:token/terminate`

何も返ってこないa

しかし、もしそうなら

puts `curl  -v --insecure -X POST -H 'Host: api.test.com' -H 'Tester #{@@test_name}' -d 'token=#{token_raw}' https://teststage.BLAHBLAH:token/terminate`

次に、出力を確認できます。変数に読み込むにはどうすればよいですか。可能であれば、OPEN3 のようなインポートのない回答を希望します。

4

3 に答える 3

3

なぜかわからない

a = `curl  -v --insecure -X POST -H 'Host: api.test.com' -H 'Tester #{@@test_name}' -d 'token=#{token_raw}' https://teststage.BLAHBLAH:token/terminate`

あなたのために働いていません。

より簡単なテストで得られるものは次のとおりです。

RUBY_VERSION # => "1.9.3"

`curl --version`
# => "curl 7.30.0 (x86_64-apple-darwin13.0) libcurl/7.30.0 SecureTransport zlib/1.2.5\nProtocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp \nFeatures: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz \n"

a = `curl http://echo.jsontest.com/hello/world`

a # => "{\"hello\": \"world\"}\n"

アップデート

私はあなたの質問の一部を見逃しており、あなたがヘッダーを探していることに気づきませんでした.

これを試して:

a = `curl -I http://echo.jsontest.com/hello/world`
a.lines.first # => "HTTP/1.1 200 OK\r\n"

うまくいけば、それは役に立ちます。

于 2014-03-27T22:34:37.383 に答える
1

シェル インターフェイスを呼び出す代わりに、Ethon を libcurl とのインターフェイスとして使用することをお勧めします。特に、Ruby がシェルや他のプロセスとより簡単にインターフェイスするために提供するツール ( Open3 など) を使用したくない場合は特にそうです。 .

注: Ruby 標準ライブラリ (Open3 を含む) は Ruby の一部であり、Ruby とともに配布されます。requireこれはインポートではありませんが、なんらかの理由でメソッドを使用したくない場合は、IO追加のコードをロードせずに使用でき、Open3 が利用する低レベルのインターフェイスを提供します。

于 2014-03-27T00:07:44.663 に答える