curl отправка запроса к API не работала с использованием переполнения стека

Я пытаюсь отправить push-уведомление, используя мой собственный API, используя приведенный ниже код. Я уверен, что curl был включен на моем сервере. Я получаю ниже как ответ.

        $url = "http://efpushtest.meteor.com/api/push";

# Our new data
$data = json_encode(array(
'message' => "this is venkat test push message",
'device' => "12345"));

$ch = curl_init($url);

# Setting our options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# Get the response
$result = curl_exec($ch);
curl_close($ch);

Отклик:

{«success»: false, «message»: «Неожиданный токен u»}

Я не понимаю, где я иду не так с этим кодом.

0

Решение

Так как я получаю тот же ответ, делая это в консоли браузера:

$.post( "/api/push/", { "message" : "this is venkat test push message","device" : "12345" } );

Я бы сказал, что проблема в вашем коде API

Этот ответ здесь, кажется, говорит то же самое:

https://stackoverflow.com/a/13022566/4152193

0

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

Так как вы говорите в комментарии, что он ожидает параметры записи, ваш запрос не должен быть закодирован в json, как в вашем коде. Правильный способ справиться с этим — разместить поля следующим образом:

    $url = "http://efpushtest.meteor.com/api/push";

# Our new data
$data = array(
'message' => "this is venkat test push message",
'device' => "12345");

$ch = curl_init($url);

// build the post string here
foreach($data as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}

rtrim($fields_string, '&');

# Setting our options
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# Get the response
$result = curl_exec($ch);
curl_close($ch);

где вы фактически публикуете параметры как POST параметры, передающие их в виде строки, как вы могли бы видеть в GET, Ваш пример будет публиковать:

сообщение = это тестовое сообщение венка&Устройство = 12345

На вашем месте я бы также обновил объявление массива, чтобы оно прошло url_encoded значения к посту как в:

    $data = array(
'message' => urlencode("this is venkat test push message"),
'device' => urlencode("12345")
);

чтобы любые специальные символы в строке не нарушали ваши запросы

СТАРЫЙ ОТВЕТ ЗА JSON


Попробуйте установить заголовки запроса curl, чтобы указать, что вы публикуете json в api

# Настройка наших опций
curl_setopt ($ ch, CURLOPT_HTTPHEADER, массив (‘Content-Type: application / json’));

curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ data);
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true);

0

По вопросам рекламы [email protected]