Intereting Posts
обновление раскрывающегося списка изменений другого раскрывающегося списка с помощью php-ajax отрицательная группа с выраженным выражением Ошибка анализа данных org.json.JSONException: Конец ввода на символ 0 из – Android Потерять значение $ _SESSION при перенаправлении Zend Framework 2 – глобальная проверка подлинности с помощью ZFCUser Включить ошибки в браузере при разборе PHP-файлов Ошибка MySQL: «mysql_fetch_assoc () ожидает, что параметр 1 будет ресурсом» Класс 'App \ Controller \ Debugger' не найдена ошибка с cakephp ver3 PHP – Как получить имя файла из строки url Почему моя страница по-прежнему загружается, хотя индикатор выполнения показывает, что загрузка уже завершена? Доступ запрещен для вызова API LinkedIn Передача настраиваемого значения поля в корзину в Woocommerce Ошибка Symfony sf_culture = 1 Экран загрузки JQuery для покрытия большого запроса mysql через PHP? Правило .htaccess для многоязычного сайта

Отправка данных в веб-службу с использованием сообщения

Мне предоставлен пример подключения к определенному веб-серверу.

Это простая форма с двумя входами:

Форма Webservice

Он возвращает true после отправки формы как с токеном, так и с json.

Это код:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Webservice JSON</title> </head> <body> <form action="http://foowebservice.com/post.wd" method="post"> <p> <label for="from">token: </label> <input type="text" id="token" name="token"><br> <label for="json">json: </label> <input type="text" id="json" name="json"><br> <input type="submit" value="send"> <input type="reset"> </p> </form> </body> </html> 

Чтобы сделать его динамичным, я пытаюсь реплицировать его с помощью PHP.

 $url = "http://foowebservice.com/post.wd"; $data = array( 'token' => 'fooToken', 'json' => '{"foo":"test"}', ); $content = json_encode($data); $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $content); $json_response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $response = json_decode($json_response, true); 

Но я должен делать что-то неправильно, потому что $ response это ложное значение.

Я не против делать это иначе, вместо использования Curl.

Какие-либо предложения?

ОБНОВИТЬ

Как было предложено в первом ответе, я попытался установить массив $ data следующим образом:

 $data = array( 'token' => 'fooToken', 'json' => array('foo'=>'test'), ); 

Однако ответ был также ложным.

Я пробовал плагин Postman REST – Client для Chrome и с помощью средств разработки / сети, URL-адрес в заголовках:

 Request URL:http://foowebservice.com/post.wd?token=fooToken&json={%22foo%22:%22test%22} 

Я предполагаю, что это тот же URL-адрес, который должен быть отправлен с использованием CURL.

Вы передаете данные POST в формате JSON, попробуйте передать его в форме k1 = v1 & k2 = v2. Например, после определения $data array добавьте следующее:

 foreach($data as $key=>$value) { $content .= $key.'='.$value.'&'; } 

затем удалите следующие строки:

 $content = json_encode($data); 

а также

 curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); 

Полный код (протестирован):

test.php

 <? $url = "http://localhost/testaction.php"; $data = array( 'token' => 'fooToken', 'json' => '{"foo":"test"}', ); foreach($data as $key=>$value) { $content .= $key.'='.$value.'&'; } $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $content); $json_response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $response = json_decode($json_response, true); var_dump($response); ?> 

testaction.php

 <? echo json_encode($_POST); ?> 

вывод:

 array(2) { 'token' => string(8) "fooToken" 'json' => string(14) "{"foo":"test"}" } 

Часть $data уже кодируется json. Попробуйте сделать $data pure php. т.е. $data['json']=array('foo'=>'test');