如何使用来自ruby的`&`wget

时间:2014-10-12 07:49:53

标签: ruby wget

我正在尝试获取http://example.com/foo.php?arg1=1&arg2=2等网页数据。

我可以毫无问题地使用wget来获取该页面,但是当我从ruby脚本中调用wget时:

`wget http://example.com/foo.php?arg1=1&arg2=2`

然后wget只连接到http://example.com/foo.php?arg1=1。简而言之,wget忽略了第二个论点。

我也尝试使用system方法,但最终会出现同样的错误。如何将&与ruby中的wget一起使用?

1 个答案:

答案 0 :(得分:3)

使用引号包围url以防止shell解释器&

`wget 'http://example.com/foo.php?arg1=1&arg2=2'`
#     ^                                        ^

或逃避&

`wget http://example.com/foo.php?arg1=1\\&arg2=2`
#                                      ^^^

更新,或者您可以使用Shellwords::shellescape作为Зелёный建议:

"foo&bar".shellescape
# => "foo\\&bar"

require 'shellwords'
`wget #{Shellwords.shellescape('http://example.com/foo.php?arg1=1&arg2=2')}`

或者,使用不需要转义的IO::popen(或Open3::*):

IO.popen(['wget', 'http://example.com/foo.php?arg1=1&arg2=2']).read