2

我有以下 curl 命令并想与 php curl 一起使用。在 CLI 中使用 curl 的命令可以正常工作。
命令从 REST Web 服务 API 收集数据。该服务将 URL 编码的查询字符串作为“q”参数,并返回一个简单的 JSON 编码结果列表。

卷曲命令:

curl -XGET 'user:password@192.168.0.199/cdtc-test/service.php/find/ca_objects?q=*' -      d '{
"bundles" : {
"access" : { "convertCodesToDisplayText" : true },
"status" : { "convertCodesToDisplayText" : true },
"ca_entities.entity_id" : {"returnAsArray" : true }
}
}'

我让它在 PHP 中工作,直到带有以下代码的 -d 标志:

$curl = curl_init("user:password@192.168.0.199/cdtc-test/service.php/find/ca_objects?q=*"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($curl);
curl_close ($curl);

我的问题是,如何使用 CURLOPT_POSTFIELDS 传递 -d 标志后面的数据?我尝试使用以下代码但没有结果:

curl_setopt ($curl, CURLOPT_POST, true);
url_setopt ($curl, CURLOPT_POSTFIELDS, '{
"bundles" : {
"access" : { "convertCodesToDisplayText" : true },
"status" : { "convertCodesToDisplayText" : true },
"ca_entities.entity_id" : {"returnAsArray" : true }
}
}');   

以下是打印 curl_getinfo( $curl ); 的结果

Array ( [url] => user:password@192.168.0.199/cdtc-test/service.php/find/ca_objects?q=* [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => 0 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [certinfo] => Array ( ) [redirect_url] => ) 

我浏览了文档并尝试了我能想到的一切,但我真的迷失了。任何帮助将不胜感激。

4

2 回答 2

2

您正在发出 GET 请求,而不是 POST,所以我认为 php 等效项是:

$curl = curl_init("user:password@192.168.0.199/cdtc-test/service.php/find/ca_objects?q=*&" . urlencode('{
"bundles" : {
"access" : { "convertCodesToDisplayText" : true },
"status" : { "convertCodesToDisplayText" : true },
"ca_entities.entity_id" : {"returnAsArray" : true }
}
}')); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($curl);
curl_close ($curl);
于 2013-06-08T18:30:07.993 回答
1

答案是在 -d 标志之后用数据构建一个数组,将其编码为 JSON 并发送。我没找到,开发人员帮我解决了。这是代码:

 $va_body=array(
    "bundles" => array(
        "ca_objects.access" => array("convertCodesToDisplayText" => true),
        "ca_objects.description" => array("convertCodesToDisplayText" => true),
    )
);

$curl = curl_init("user:password@192.168.0.199/cdtc-test/service.php/find/ca_objects?q=*");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, GET); //Not sure why get here...
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($va_body));
$result = curl_exec ($curl);
curl_close ($curl);  
于 2013-06-09T19:27:58.813 回答