【问题标题】:Ruby syntax with quotes [closed]带引号的 Ruby 语法 [关闭]
【发布时间】:2012-12-06 16:47:16
【问题描述】:

我的 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

【问题讨论】:

  • 您始终可以使用curb gem,而不必外部调用curl

标签: ruby syntax quotes


【解决方案1】:

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

call = "#{curlsyntax}\"#{restcall}\""

【讨论】:

  • 或者,为了避免转义引号:call = %{#{curlsyntax}"#{restcall}"}.
【解决方案2】:

这样做:

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

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

【讨论】:

  • @theTinMan 我想他想用他正在构建的字符串在 CLI 上调用 cURL。 Open3 在环境变量等方面为您提供了更大的灵活性。不过在这种情况下可能没有必要,这是真的:)
  • 在这种情况下,他应该使用 Curb gem。
【解决方案3】:

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

【讨论】:

  • 或者 Ruby 自己的 URI,有其缺点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 2021-05-01
  • 2011-05-08
相关资源
最近更新 更多