使用带单引号,空格,管道等的scala sys.process
发布时间:2020-12-16 09:26:09 所属栏目:安全 来源:网络整理
导读:我试图使用scala.sys.process._向我的 chronos服务器提交一个POST请求与curl.因为命令参数中有空格,所以我使用的是cmd的Seq [String]变体.!! 我正在构建命令: val cmd = Seq("curl","-L","-X POST","-H 'Content-Type: application/json'","-d " + jsonHash
我试图使用scala.sys.process._向我的
chronos服务器提交一个POST请求与curl.因为命令参数中有空格,所以我使用的是cmd的Seq [String]变体.!!
我正在构建命令: val cmd = Seq("curl","-L","-X POST","-H 'Content-Type: application/json'","-d " + jsonHash,args.chronosHost + "/scheduler/" + jobType) 如预期的那样产生 cmd: Seq[String] = List(curl,-L,-X POST,-H 'Content-Type: application/json',-d '{"schedule":"R/2014-02-02T00:00:00Z/PT24H","name":"Scala-Post-Test","command":"which scalac","epsilon":"PT15M","owner":"myemail@thecompany.com","async":false}',localhost:4040/scheduler/iso8601) 但是,运行它似乎会破坏’Content-Type:application / json’参数: scala> cmd.!! % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 264 0 100 100 164 2157 3538 --:--:-- --:--:-- --:--:-- 54666 res21: String = "The HTTP header field "Accept" with value "*/* 'Content-Type:application/json'" could not be parsed. " 我不明白.相反,调用cmd.mkString(“”)并将粘贴复制到终端按预期工作. curl -L -X POST -H 'Content-Type:application/json' -d '{"schedule":"R/2014-02-02T00:00:00Z/PT24H","owner":"austin@quantifind.com","async":false}' mapr-01.dev.quantifind.com:4040/scheduler/iso8601 我已经尝试了-H参数的多种变体无济于事,对sys.process中使用单引号的任何见解.我将不胜感激. 我也尝试过这方面的变化,这会产生一系列错误,包括 <h2>HTTP ERROR: 415</h2> <p>Problem accessing /scheduler/iso8601. Reason: <pre> Unsupported Media Type</pre></p> <hr /><i><small>Powered by Jetty://</small></i> (除了屠杀jsonHash,即: [1/6]: '"schedule":"R/2014-02-02T00:00:00Z/PT24H"' --> <stdout> curl: (6) Couldn't resolve host ''"schedule"' Which makes me think it is not interpreting the -H argument correctly 解决方法
您需要将每个参数拆分为序列的单独元素.
而不是这个: val cmd = Seq("curl",args.chronosHost + "/scheduler/" + jobType) 你需要写这个: val cmd = Seq("curl","-X","POST","-H","'Content-Type: application/json'",args.chronosHost + "/scheduler/" + jobType) 它将序列的每个元素作为参数放在命令行上.所以“-H’Content-Type …看起来像卷曲的一个参数,而它应该是2. 这是一种简单的测试方法: import scala.sys.process._ val cmd = Seq("find","/dev/null","-name","null") // works // does not work: val cmd = Seq("find","-name null") val res = cmd.!! println(res) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |