【问题标题】:space issue in CURL with Runtime运行时 CURL 中的空间问题
【发布时间】:2016-10-26 12:56:06
【问题描述】:

我有一个 CURL 命令需要在 JSP 文件中使用 Runtime 方法运行

int cnt=10;    
String strCount="count"+cnt+"";
String msg= "{'text':'"+strCount+"'}";
String cmd = "curl -X POST -H 'Content-type: application/json' --data "+ msg +" https://hooks.slack.com/services/#####/###/###";
Runtime.getRuntime().exec(cmd);

效果很好,但是当我将strCount 更改为:

String strCount="Count is "+cnt+"";

它不再起作用了。很明显,Count is 之间的空间不再起作用了。

【问题讨论】:

  • 您必须使用exec(String[]) 方法并单独传递每个参数。
  • @MarkoTopolnik 是 java 方面的新手,请问您能更了解一下吗?
  • rt.exec("curl", "-X", "POST", "-H", ...)
  • 请注意,您的 curl 方法可能有效,但老实说,如果这获取的数据可能来自任何不受您控制的用户或消息,我会三思而后行,这并不难利用将原始用户输入传递给 exec 调用的程序。
  • 您的问题还在于该程序无法知道文本中的空格是文本中的空格还是要使用的单独参数,您可以尝试引用该参数, 但我认为 Marko 上面的回答比引用它要好得多。

标签: java jsp curl


【解决方案1】:

把你的代码改成这个。

Runtime.getRuntime().exec(new String[] {"curl","-X", "POST","-H","'Content-type: application/json'","--data", msg, "https://hooks.slack.com/services/#####/###/###"});

根据Runtime#exec() docs,如果您将它们设为数组,则可以传递带有空格的单个参数,如上所示。

【讨论】:

  • 谢谢,但没有运气,得到相同的结果
  • 你能详细说明一下吗?结果到底是什么?
  • 我的场景正是我的问题中所解释的,当我在我的 json 争论中添加空格时它不起作用,如果没有空格,那么我的调用正在工作
  • 我假设当你说它不起作用时,你的意思是它不会发布到 slack。服务器是否返回任何错误?
  • curl -X POST -H 'Content-type: application/json' --data "{'text':'Count is'}" https://hooks.slack.com/services/###/####/### ,当我从服务器尝试此操作时,它工作正常从 slack 获取消息,当我使用运行时运行相同时,它不会返回任何错误,但没有收到来自 slack 的消息
猜你喜欢
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多