我有一个Datasnap Server,并且有一个名为:
的方法function TServerMethodsMain.AddCity( ACity : TJSONObject ) : Boolean ;
我在下面做了一些小PHP代码来调用这个方法。
<?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 '</pre>';
?>
我从浏览器(Firefox或IE)收到此错误消息:
警告: 文件(http://192.168.1.101:8088/datasnap/rest/TServerMethodsMain/AddCity/ { “ID”:1, “描述”:“MY CITY“,”uf“:”XX“})[function.file]: 无法打开流:HTTP请求 失败! HTTP / 1.1 500内部服务器 错误 C:\ xampp \ htdocs \ json-php \ index.php on 第19行
好吧,我有其他方法可以正常使用这个PHP代码,但只有当我传递为参数原始类型:字符串,整数......
我做了调试,看到问题发生,我需要将参数 JSONObject 转换为对象( unMarshalll )。当我通过Client Delphi Win32调用此方法时,它工作正常!
有人知道这个问题吗?
谢谢!
答案 0 :(得分:1)
您的PHP代码向datasnap服务器发出GET请求。对于像JSONObject这样的复杂参数,您需要使用POST或PUT HTTP动词以及正确的JSONObject作为消息正文。 http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol#Parameters_in_the_URL
因此,您需要向datasnap服务器发送POST请求。查看文档以获取更多详细信息。 http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol
答案 1 :(得分:1)
此 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);
答案 2 :(得分:0)