2017-02-22 2 views
0

Это мой code.In этого случая, он не будет принимать значение поста ($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? – miken32

+0

Лучше использовать php [curl extension] (http://php.net/manual/ru/book.curl.php) – Sakezzz

+0

1. Между вашим хэш-аргументом данных нет места и URL-адрес, который заставляет URL-адрес быть частью ваших данных POST, но doe sn't сообщение в URL-адрес 2. В ваших данных POST есть ошибочный '' ' – mroach

ответ

4

Просто используйте РНР 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

он работает для меня ... thankyou @ miken32 – user94

+0

Могу ли я использовать Ajax для вызова Curl здесь, потому что он загружает страницу каждый раз, когда я использую текстовое поле? @ Miken32 – user94

1

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

Затем вам не хватает места между данными POST и URL-адресом, поэтому завиток даже не будет видеть URL-адрес.

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

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

+0

Хотя это правда, это не пытается ответить на вопрос и должно быть комментарием. – miken32

+0

Поломка команды 'curl', вероятно, связана с тем, что она не ускользает от входа. – mroach

1

Позаботьтесь об использовании "и» Вы были заключены $con в одинарные кавычки, чтобы он не получал разобраны:

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

$a : $bob 
$b : hello 
Смежные вопросы