Использование сервера Datasnap с PHP, передавая JSONObject в качестве параметра - PullRequest
1 голос
/ 29 января 2011

У меня есть сервер Datasnap и есть метод с именем:

function TServerMethodsMain.AddCity( ACity : TJSONObject ) : Boolean ;

Я сделал небольшой PHP-код ниже, чтобы вызвать этот метод.

<code><?php

class city
{
   public $id;
   public $description;
   public $uf;          
}

$objcity = new city ;

$objcity -> id          = 1         ;
$objcity -> description = 'MY CITY' ;
$objcity -> uf          = 'XX'      ;

$url  = 'http://192.168.1.101:8088/datasnap/rest/TServerMethodsMain/AddCity/' ;
$url .= json_encode( $objcity ) ;

$page = file($url) ;  

$show = json_decode($page[0]);

echo '<pre>';

print_r ($show);

echo '
'; ?>

Я получил это сообщение об ошибке из браузера (Firefox или IE):

Внимание: файл (http://192.168.1.101:8088/datasnap/rest/TServerMethodsMain/AddCity/{"id":1,"description":"MY CITY "," uf ":" XX "}) [function.file]: не удалось открыть поток: HTTP-запрос не удалось! Внутренний сервер HTTP / 1.1 500 Ошибка в C: \ xampp \ htdocs \ json-php \ index.php на строка 19

Ну, у меня есть другие методы, которые прекрасно работают с этим php-кодом, но только если я передаю их как параметр Примитивные типы : String, Integer ...

Я сделал отладку и вижу, что проблема возникает в тот момент, когда мне нужно преобразовать параметр JSONObject в Объект ( unMarshalll ). Когда я вызываю этот метод на клиенте Delphi Win32, он отлично работает!

Кто-нибудь знает что-нибудь о проблеме?

Спасибо!

Ответы [ 3 ]

1 голос
/ 31 декабря 2012

Этот PHP-код работает с DataSnap - Delphi XE2

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json", "Content-Type: text/xml; charset=utf-8"));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'user:pass');
curl_setopt($ch, CURLOPT_URL, $param_url);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
1 голос
/ 30 января 2011

Ваш PHP-код отправляет GET-запрос серверу datasnap. Для сложных параметров, таких как JSONObject, необходимо использовать HTTP-глагол POST или PUT с правильным JSONObject в качестве тела сообщения. http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol#Parameters_in_the_URL

Итак, вам нужно отправить запрос POST серверу datasnap. Проверьте документацию для получения дополнительной информации. http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol

0 голосов
/ 02 февраля 2011

перейдите по ссылке с моим ответом

http://docwiki.embarcadero.com/RADStudio/en/Talk:DataSnap_REST_Messaging_Protocol

...