我正在尝试获取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一起使用?
答案 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