【发布时间】:2014-12-12 15:33:42
【问题描述】:
我知道 HTTP POST 表单数据作为字符串值发送到服务器端,我必须将它们转换为布尔值或整数等。
但我的问题是:是否可以在保留值类型的同时使用 cURL 发布数据?
例如:
以下 PHP 代码准备 PHP 数据数组,其中“age”是一个 int,“optin”是一个布尔值,然后使用 cURL 通过 POST 方法将此数据发送到测试脚本。
$url = 'http://www.sometestserver.com/test/receive.php';
$data = array (
'name' => "Firstname SecondName",
'age' => 25,
'optin' => true
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/xml'));
$response = curl_exec($ch);
我在上面的代码将数据发布到的测试脚本中有以下代码。该脚本只是读取其中的任何内容并将所有内容 var_dump 到一个文本文件中。
ob_start();
var_dump($_POST);
$data = ob_get_clean();
file_put_contents(time() . ".txt", $data);
输出如下:
array(22) {
["name"]=>
string(21) "Firstname SecondName"
["age"]=>
string(2) "25"
["optin"]=>
string(1) "1"
}
如您所见,所有值都转换为字符串类型,布尔值 true 转换为字符串“1”。
在另一个测试中,布尔值 false 作为空字符串 '' 发送。
有什么方法可以保留数据类型吗? 也许通过设置特定的 curl 选项? 或者这根本不可能?
如果 cUrl 总是将布尔值转换为字符串,是否有任何硬性和快速的规则来规定另一端的值是什么?即 bool true 总是会是字符串“1”而 false 总是会是空字符串吗?
感谢您的帮助。
【问题讨论】: