我的ruby代码中有以下语句
curlsyntax = "URL = "
restcall = 'http://myurl.com/File?schema=1.5&token=' + auth_token + '&product=http://myurl.com/Product/8283&form=json&productname=http://myurl.com/name/' + productname + '&priority=now'
call = curl + restcall
这给我的是我最后一个开头的引用,即“URL = http ...但我实际上并不希望第一个引用显示它应该是URL =”http
答案 0 :(得分:3)
您在URL之前看到的引用只是ruby表示字符串的方式 - 它实际上并不是字符串的一部分。要在restcall
之前和之后添加双引号,您可以执行以下操作:
call = "#{curlsyntax}\"#{restcall}\""
答案 1 :(得分:1)
这样做:
call = %{URL = "#{restcall}"}
但你应该使用类似http://ruby-doc.org/stdlib-1.9.3/libdoc/open3/rdoc/Open3.html之类的东西进行安全的系统调用。例如:
require 'open3'
require 'shellwords'
command = Shellwords.shelljoin(['curl', 'arg1', 'arg2', 'arg3'])
stdin, stdout, stderr = Open3.popen3({'ENV1' => 'value1', 'ENV2' => 'value2'}, command)
result = stdout.read
通过这种方式,您可以安全地转义传递给命令行的参数,甚至可以将环境变量传递给您的调用。
答案 2 :(得分:1)
手动构建此类查询并不安全。我会选择使用这样的东西:https://github.com/sporkmonger/addressable