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

Он возвращает 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');