我有以下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标志后面的数据? 我尝试使用以下代码,没有resutls:
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] => )
我去了文档并尝试了我能想到的一切,但我真的迷失在这里。 任何帮助将不胜感激。
答案 0 :(得分: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);
答案 1 :(得分: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);