не может передать значение сообщения в curl

Это мой код. В этом случае он не будет принимать значение поста ($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);
}
?>

0

Решение

Просто используйте PHP встроенные команды curl:

<?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));
}
?>
4

Другие решения

Вы берете сырой POST значение и передача его в качестве аргумента командной строки. Это ужасная идея. Это открывает вам широкие возможности для атак удаленного выполнения. Кто-то может легко опубликовать значение беседы «; sudo rm -rf /». Плохие новости. Отсутствие экранирования от ввода почти наверняка нарушит хэш JSON, который вы пытаетесь отправить.

Далее, вам не хватает пробела между вашими данными POST и URL, поэтому curl даже не увидит URL.

Если вам нужно выполнить версию curl для командной строки, используйте escapeshellarg на ваших ценностях.

В идеале используйте библиотеку PHP curl. http://php.net/manual/en/book.curl.php
Тогда вы можете программно использовать curl, и вам не нужно беспокоиться о порождении curl процесс или как избежать аргументов.

1

Позаботьтесь об использовании «и». Вы приложили $con в одинарных кавычках, чтобы он не анализировался:

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

$a : $bob
$b : hello
1
По вопросам рекламы [email protected]