2014-02-19 5 views
0

Я пытаюсь создать небольшой файл API и по какой-либо причине файл api.php, который я отправляю cURL-данные через POST, не получает данные. Я бесконечно смотрел здесь и Google и не мог понять, что случилось. Я пробовал разные методы и ничего не работая.cURL не отправляет данные POST в PHP

Вот мой код.

client.php:

$url = 'http://localhost/listcross2/api.php'; 

    //var_dump($_POST); 
    $rCURL = curl_init(); 

    $params = array('action' => 'login', 
     'username' => $_POST["username"], 
     'password' => $_POST["password"]); 

    curl_setopt_array($rCURL, array(
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => $url, 
    CURLOPT_POST => true, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_REFERER => "http://www.localhost/listcross2/client.php", 
    CURLOPT_POSTFIELDS => http_build_query($params) 
    ) 
); 

    $aData = curl_exec($rCURL); 

    if(curl_errno($rCURL)) 
    { 
     echo 'error:' . curl_error($rCURL); 
    } 

    curl_close($rCURL); 

    $login_result = json_decode ($aData, true); 

    var_dump($login_result); 

api.php

$value = "An error has occurred within API: "; 
var_dump($_POST); 

// For POST actions 
if (!empty($_POST)) 
{ 
    switch($_POST["action"]) 
    { 
    case "login": 
     if (isset($_POST["username"]) && isset($_POST["password"])) 
      $value = login($_POST["username"], $_POST["password"]); 
     else 
      $value = "Missing argument"; 
     break; 
    } 
} 

exit(json_encode($value)); 
+0

Вы пробовали разные вещи? Как что? –

+0

Изменение любых параметров CURLOPT, которые я обнаружил, когда пользователи пытались подключиться к сети, и используя urlencode() для преобразования массива в URL-адрес. – jmeanor

+0

Вам не нужно делать 'http_build_query'. cURLcan принять массив напрямую и сделать это сам: 'CURLOPT_POSTFIELDS => $ params'. –

ответ

0

Когда я подать на страницу API, я получаю следующее сообщение об ошибке:

Fatal error: Call to undefined function login() in /var/www/playground/api.php on line 13 

Если определить функции, называемой login(), вы больше не получите эту ошибку. Кроме того, этот код:

exit(json_encode($value)); 

имеет нулевое значение, потому что вы передаете ему недопустимый аргумент. Если вы передадите массив json_encode(), вы больше не получите нулевое значение, возвращаемое этой функцией. Простой пример функции входа в систему:

function login($username, $password) { 
    return array("username"=>$username, "password"=>$password); 
} 
+0

Хотя существует хорошая вероятность того, что существует проблема с функцией 'login()' OP, 'json_encode()' должен иметь возможность обрабатывать больше, чем просто массивы в качестве аргументов. Из документа для [json_encode] (http://us3.php.net/manual/en/function.json-encode.php): «PHP реализует надмножество JSON - он также кодирует и декодирует скалярные типы и NULL» –

+0

json_encode ранее работал со строками, и я только что прокомментировал мою функцию входа, чтобы просто вернуть «работает!». client.php все еще получает NULL (теперь он даже не возвращает мое сообщение об ошибке). Это орехи. – jmeanor

+0

Патрик, вы правы, что ему не нужно быть массивом, но с точки зрения вопроса переменная $ value равна null, поскольку функция login() не определена. У меня есть error_reporting, поэтому значение, которое я получаю: Fatal error: вызов неопределенной функции login() в /var/www/playground/api.php в строке 12 –

Смежные вопросы