无法将帖子值传递给curl

时间:2017-02-22 04:57:08

标签: php curl watson-conversation watson

这是我的代码。在这种情况下,它不会使用帖子值($con)来输入$cmd中的文字

  <?php
  if(isset($_POST['conversation']))
  {
  $con=$_POST['conversation'];
  echo $con;
  $cmd='curl -X POST -u "username":"password" -H "Content-Type:application/json" -d "{\"input\": {\"text\":\"$con\"]}}""https://gateway.watsonplatform.net/conversation/api/v1/workspaces/a9379972-d820-4cdf-b1cb-ad0af898a534/message?version=2016-07-11"';
  exec($cmd,$result);
 //$response = json_decode($result);
 print_r($result);
 }
 ?>

3 个答案:

答案 0 :(得分:4)

只需使用PHP built-in curl commands

<?php
if(isset($_POST['conversation'])) {
    $data = array("input"=>array("text"=>$_POST["conversation"]));
    $url = "https://gateway.watsonplatform.net/conversation/api/v1/workspaces/a9379972-d820-4cdf-b1cb-ad0af898a534/message?version=2016-07-11";
    $ch = curl_init($url);
    curl_setopt_array($ch, array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_USERPWD => "username:password",
        CURLOPT_HTTPHEADER => array("Content-Type:application/json"),
        CURLOPT_POSTFIELDS => json_encode($data),
    ));
    $response = curl_exec($ch);
    curl_close($ch);
    print_r(json_decode($response));
}
?>

答案 1 :(得分:1)

您正在获取原始POST值并将其作为命令行参数传递。这是一个糟糕的主意。它为您提供远程执行攻击。有人可以轻松发布“; sudo rm -rf /”的会话值。坏消息。不转义输入几乎肯定会破坏您尝试发送的JSON哈希值。

接下来,您在POST数据和网址之间缺少空格,因此curl甚至看不到网址。

如果您需要执行curl的命令行版本,请对您的值使用escapeshellarg

理想情况下,使用PHP curl库。 http://php.net/manual/en/book.curl.php 然后,您可以以编程方式使用curl,而不必担心产生curl进程或如何转义args。

答案 2 :(得分:1)

请注意使用'和'。您已将$con括在单引号中,因此无法解析:

$bob = 'hello';
$a = '$bob';
$b = "$bob";

$a : $bob
$b : hello