2014-10-12 1 views
2

http://example.com/foo.php?arg1=1&arg2=2과 같은 웹 페이지 데이터를 가져 오려고합니다.루비에서`&`를 사용하여 wget을 사용하는 방법

나는 문제없이 wget를 사용하여 페이지를 얻을 수 있지만, 내가 좋아하는 루비 스크립트에서 wget를 호출 할 때 할 수 다음

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

은 wget 만 http://example.com/foo.php?arg1=1에 연결합니다. 즉, wget은 두 번째 인수를 무시합니다.

또한 system 메서드로 시도했지만 동일한 오류가 발생합니다. 어떻게하면 &을 루비의 wget과 함께 사용할 수 있습니까?

+1

그렇게 할 * 너무 * 많은 더 좋은 방법이 있습니다. open-uri 또는 mechanize가 떠오른다. – pguardiario

답변

3

서라운드 쉘 인터프리터 & 방지하기 위해 인용과 URL :

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

을하거나 & 탈출 :

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

UPDATE을하거나 Зелёный로 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 
+2

도 ['Shellwords # shellescape'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/shellwords/rdoc/Shellwords.html#method-c-shellescape)를 사용할 수 있습니다. –

+0

따옴표는 저를위한 간계를했다. 너무 어리 석고 아직 시간이 많이 걸립니다. 감사! – Mosselman

관련 문제