-1

我的红宝石代码中有以下语句

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

4

3 回答 3

3

您在 URL 之前看到的引号只是 ruby​​ 表示字符串的方式 - 它实际上不是字符串的一部分。要在 之前和之后添加双引号restcall,您可以这样做:

call = "#{curlsyntax}\"#{restcall}\""
于 2012-12-06T16:52:59.697 回答
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

这样您就可以安全地转义传递给命令行的参数,甚至将环境变量传递给您的调用。

于 2012-12-06T16:53:40.447 回答
1

手动构建这样的查询是不安全的。我会选择使用这样的东西:https ://github.com/sporkmonger/addressable

于 2012-12-06T16:55:55.510 回答