как отправить данные с помощью Curl в php?

Я создал веб-сервисы в рамках рестлера и пытаюсь вставить данные с помощью curl в php из клиентской библиотеки, которую я создал.

api.php

/**
     * Manually routed method. we can specify as many routes as we want
     *
     * @url POST addcomment/{token}/{email}/{comment}/{story_id}
     */
    function addComment($token,$email,$comment,$story_id){
        return $this->dp->insertComment($token,$email,$comment,$story_id);
    }

для целей тестирования от клиента: testing.php

$data_string = "token=900150983cd24fb0d6963f7d28e17f72&[email protected]&comment=commentusingcurl&story_id=2";                                                                                   

$ch = curl_init('http://localhost/Restler/public/examples/news/addcomment');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
//curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-Type : text","Content-lenght:".strlen($data_string)));                                                                                                                                     
$result = curl_exec($ch);

но выдает 404. Пожалуйста помоги.


person ketul shah    schedule 15.02.2013    source источник
comment
может быть, он не получает URL-адрес.   -  person Yogesh Suthar    schedule 15.02.2013
comment
я получаю успех, используя метод GET.   -  person ketul shah    schedule 15.02.2013
comment
Ну, 404 — это просто не найденный ответ. Вы проверили правильность URL-адреса? Попробуйте в браузере или из командной строки.   -  person Clyde    schedule 15.02.2013
comment
Так что используйте GET, если он работает. :)   -  person Yogesh Suthar    schedule 15.02.2013


Ответы (2)


Вы не должны сопоставлять все параметры с URL,

/**
 * Manually routed method. we can specify as many routes as we want
 *
 * @url POST addcomment/{token}/{email}/{comment}/{story_id}
 */
function addComment($token,$email,$comment,$story_id){
    return $this->dp->insertComment($token,$email,$comment,$story_id);
}

При этом API может принимать только такие URL, как

http://localhost/Restler/public/examples/news/addcomment/900150983cd24fb0d6963f7d28e17f72/[email protected]/commentusingcurl/2

Измените метод API на

/**
 * Manually routed method. we can specify as many routes as we want
 *
 * @url POST addcomment
 */
function addComment($token,$email,$comment,$story_id){
    return $this->dp->insertComment($token,$email,$comment,$story_id);
}

Тогда ваш пример cURL должен работать нормально

$data_string = "token=900150983cd24fb0d6963f7d28e17f72&[email protected]&comment=commentusingcurl&story_id=2";

$ch = curl_init('http://localhost/Restler/public/examples/news/addcomment');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
//curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-Type : text","Content-lenght:".strlen($data_string)));                                                                                                                                     
$result = curl_exec($ch);
person Community    schedule 16.02.2013
comment
hy спасибо, чтобы подтвердить ответ :) - person ketul shah; 16.02.2013

//curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-Type : text","Content-lenght:".strlen($data_string)));

ПРИМЕЧАНИЕ. Раскомментируйте строку.

См. пример публикации данных с помощью curl.

function post($requestJson) {

        $postUrl = $this->endpoint."?access_token=".$this->token;

        //Get length of post
        $postlength = strlen($requestJson);

        //open connection
        $ch = curl_init();

        //set the url, number of POST vars, POST data
        curl_setopt($ch,CURLOPT_URL,$postUrl);
        curl_setopt($ch,CURLOPT_POST,$postlength);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$requestJson);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $response = curl_exec($ch);

        //close connection
        curl_close($ch);

        return $response;
    }

Проверьте некоторые ссылки для получения дополнительной информации,

Выполнение HTTP POST с помощью PHP CURL

Отправка сообщения формы с помощью PHP и CURL

Отправить по URL-адресу с помощью cURL и PHP

Настройте простое соединение cURL с данными POST с помощью PHP

Изменить:

Рестлер всегда возвращает ошибку 404, не найденную

может помочь вам.

person Tony Stark    schedule 15.02.2013
comment
Вы когда-нибудь определяли параметр POST в рестлере? Я сомневаюсь, что могу не исправить. - person ketul shah; 15.02.2013
comment
@ketulshah проверить мой ответ stackoverflow.com/ вопросы/10506060/ - person Tony Stark; 15.02.2013
comment
@ketulshah Я никогда не использовал рестлер-фреймворк, но проблема не в этом. - person Tony Stark; 15.02.2013
comment
@ketulshah у вас есть обновленная версия в рамках рестлера? и проверьте мой ответ после редактирования одной ссылки. - person Tony Stark; 15.02.2013
comment
да, я использую версию 3 рестлера - person ketul shah; 15.02.2013
comment
о, я понял.... я только что изменил @url в комментарии /** * @url POST addcomment/ */ - person ketul shah; 15.02.2013
comment
Ваш ответ может быть правильным, но он не относится к моим вопросам. Я хотел бы поблагодарить за ваши усилия. Если я приму ваш ответ, это введет в заблуждение людей, которые ищут соответствующий ответ. - person ketul shah; 16.02.2013
comment
у меня не хватило репутации извините :( - person ketul shah; 16.02.2013