curl从命令行运行,但不在ruby脚本中运行

时间:2012-05-17 18:05:22

标签: ruby windows curl

以下命令(及其变体)在mac的终端中运行正常,在mac上执行的ruby程序中运行正常,直接在windows命令提示符下运行正常,但在我尝试运行时因解析错误而失败它在Windows上的ruby文件中。

curl -u"user:pwd" -d"{\"name\":\"new_repo_beepo\"}" https://api.github.com/user/repos --insecure

我尝试用反引号,%x()和系统执行它。我也尝试过替换字符串和json'ing片段,没有任何运气。根据我的判断,失败点位于-d"{\"name\":\"repo_name\"}"部分,但这只是在没有它的情况下尝试命令。无论如何,在ruby中的Windows命令的每个变体中,我都会收到JSON解析错误。

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用rest-client

它是一颗宝石,效果很好。它可能比使用system()%x()更好,它肯定更安全(您可以在system()上注入恶意bash命令,因此需要谨慎使用。)

使用起来非常简单。只需安装gem并将其作为ruby文件的一部分。

注意:如果使用Rails,只需将其添加到Gemfile中(无需在每个文件上使用它)。

require 'rest_client'

RestClient.get 'https://api.github.com/user/repos', {params: {id: 50, foo: 'bar'}}

您还可以为--insecure ssl。

使用一些参数

答案 1 :(得分:1)

看起来这可能是ruby在Windows上运行命令所使用的shell机制的解析/引用问题。您是否尝试过标记化的系统形式,例如:

system('curl', '-u"user:pwd"', '-d"{"name":"new_repo_beepo"}"', 'https://api.github.com/user/repos', '--insecure')

在posix上,将指定的arg向量直接发送到exec'ed程序,而不会让shell妨碍;对于windows来说可能是相同的语义。

你应该不需要exec curl这样做,因为ruby有stdlib Net :: HTTP。在评论中你提到你在jruby下遇到了这个模块的问题,但我们这里有jruby服务正在运行http [s]请求就好了,所以你可以试着发一个问题来解决你对jruby和本地http客户端的具体问题库。