Мне предоставлен пример подключения к определенному веб-серверу.
Это простая форма с двумя входами:
Он возвращает 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');