加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用带单引号,空格,管道等的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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读