【问题标题】:Consuming a Datasnap Server with PHP passing JSONObject as parameter使用 PHP 传递 JSONObject 作为参数使用 Datasnap 服务器
【发布时间】:2011-01-29 14:53:14
【问题描述】:

我有一个 Datasnap 服务器和一个名为:

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,"description":"MY CITY","uf":"XX"}) [function.file]: 无法打开流:HTTP 请求 失败的! HTTP/1.1 500 内部服务器 错误 C:\xampp\htdocs\json-php\index.php 上 第 19 行

嗯,我有其他方法可以很好地处理这个 php 代码,但前提是我作为参数传递 Primitive Types : String, Integer...

我进行了调试,发现问题发生在我需要将参数 JSONObject 转换为 ObjectunMarshallll )。当我通过客户端 Delphi Win32 调用此方法时,它工作正常!

有人知道这个问题吗?

谢谢!

【问题讨论】:

    标签: php web-services delphi json datasnap


    【解决方案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

    【讨论】:

    • 您好 Daniele Teti 首先,感谢您的回复!好吧,我不知道网络编程..好吧,我做了一个迷你框架来操作客户端 Web 和桌面。使用桌面一切正常...我只需要对另一个客户端(不是 RAD PHP)进行一些测试。可以帮助我完成我的示例代码吗?非常感谢
    • 我不在我的工作电脑上,所以我无法测试它,但代码应该如下所示:stackoverflow.com/questions/3084834/… 尽快我会在这里和我的博客中发布一些内容 (www.danieleteti .it)
    • 好的,丹尼尔,再次感谢!我会在这里尝试一些代码!尽快在这里或在您的 blok 中发布一些内容..ok
    【解决方案2】:

    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);
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多