curl从命令行运行,但不在ruby脚本中运行
下面的命令(及其变体)在mac的terminal中运行OK,在mac上执行的ruby程序中运行OK,在windows命令提示符中直接运行OK,但在windows上尝试在ruby文件中运行它时,由于解析错误而失败curl从命令行运行,但不在ruby脚本中运行,ruby,windows,curl,Ruby,Windows,Curl,下面的命令(及其变体)在mac的terminal中运行OK,在mac上执行的ruby程序中运行OK,在windows命令提示符中直接运行OK,但在windows上尝试在ruby文件中运行它时,由于解析错误而失败 curl -u"user:pwd" -d"{\"name\":\"new_repo_beepo\"}" https://api.github.com/user/repos --insecure 我尝试过使用backticks、%x()和system来执行它。我也尝试过替换字符串和jso
curl -u"user:pwd" -d"{\"name\":\"new_repo_beepo\"}" https://api.github.com/user/repos --insecure
我尝试过使用backticks、%x()和system来执行它。我也尝试过替换字符串和json'ing片段,但没有任何运气。根据我所能确定的,失败点在-d“{\“name\”:\“repo\u name\”}”
部分,但这只是尝试不使用它的命令。不管怎样,在ruby中windows上的每个命令变体中,我都会得到一个JSON解析错误。您是否尝试过使用
这是一块宝石,效果很好。它可能比使用system()
或%x()
更好,而且肯定更安全(您可以在system()
上插入恶意bash命令,因此需要小心使用)
它使用起来很简单。只需安装gem并将其作为ruby文件之一
注意:如果使用Rails,只需将其添加到您的GEM文件中(无需在每个文件上都需要它)
您还可以为
--unsecure
ssl使用一些参数。这可能是ruby用于在windows上运行命令的shell机制的解析/引用问题。您是否尝试过系统的标记化形式,例如:
system('curl', '-u"user:pwd"', '-d"{"name":"new_repo_beepo"}"', 'https://api.github.com/user/repos', '--insecure')
在posix上,将指定的arg向量直接发送到执行程序,而不让shell碍事;对于windows,可能也有相同的语义
您不需要执行curl来执行此操作,因为ruby具有stdlib Net::HTTP。在您的评论中提到,您在jruby下使用此模块时遇到问题,但我们这里有jruby服务可以很好地执行http[s]请求,因此,您可以尝试发布一个问题,以解决jruby和本机http客户端libs的具体问题。ruby在windows上运行命令时使用的shell机制可能存在解析/引用问题。您是否尝试过
system
的标记化形式,例如:system('curl','-u“user:pwd”,'-d…,…)
?在posix上,它会将指定的arg向量直接发送到已执行程序,而不会让shell碍事。为什么要卷曲呢?在ruby中,您可以使用Net::HTTP直接执行此操作。谢谢,dbenhur——今天下午我将给标记化表单一个快照。至于你的另一个问题,我们的系统运行jruby,而本机扩展对于Net:HTTP、URB和我发现的其他版本来说似乎是个问题。@dbenhur:标记化版本工作得很好!非常感谢@德本胡尔:顺便说一下,如果你想提交与答案相同的建议,我会选择它。
system('curl', '-u"user:pwd"', '-d"{"name":"new_repo_beepo"}"', 'https://api.github.com/user/repos', '--insecure')