如何将curl的输出读入ruby变量?

时间:2014-03-26 23:33:26

标签: ruby curl stdout puts

说我有以下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 OK404 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那样导入的答案。

3 个答案:

答案 0 :(得分: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"

希望这有帮助。

答案 1 :(得分:1)

你可能只想使用Ethon与libcurl接口而不是调用shell接口,特别是如果你不愿意使用Ruby提供的工具来更容易地与shell和其他进程连接(你知道,像Open3)。

注意:Ruby标准库(包括Open3)是Ruby的一部分并随之分发。它绝不是一种导入,但如果您真的不想使用require方法出于某种无聊的原因,IO可以在不加载其他代码的情况下使用,并提供Open3利用的低级接口

答案 2 :(得分:1)

试试这个:

HTTP_RESP_CODE=$(curl -s -o out.html -w '%{http_code}' http://www.example.com)

echo $HTTP_RESP_CODE

这适用于我的ruby

HTTP_RESP_CODE=`curl -s -o out.html -w '%{http_code}' http://www.example.com`
print HTTP_RESP_CODE