我知道HTTP POST表单数据作为字符串值发送到服务器端,我必须将它们转换为布尔值或整数等等。
但我的问题是:是否可以使用cURL发布数据,同时保留值的类型?
例如:
下面的PHP代码准备PHP数据数组,其中'age'是一个int,'optin'是一个布尔值,然后通过POST方法使用cURL将这些数据发送到测试脚本。
$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_dumps所有内容都添加到文本文件中。
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”。
在另一个测试中,boolean false作为空字符串''发送。
有没有办法保留数据类型? 也许通过设置一个特定的卷曲选项? 或者这根本不可能?
如果cUrl总是将布尔值转换为字符串,那么在另一端有什么值的硬性和快速规则吗?即bool是否总是成为字符串“1”而错误总是变成空字符串?
感谢您的帮助。
答案 0 :(得分:1)
你可以使用JSON来保存类型,但是......你真的需要它吗?)你总是可以将字符串转换为任何类型
答案 1 :(得分:1)
答案就是PHP将基元类型转换为字符串的方式。它唯一可能通过HTTP和cURL以字符串形式发送数据,因此php使用PHP的类型杂耍系统将非字符串值转换为字符串。
请查看PHP documentation for how PHP cast non-string values using it's type juggling system
答案 2 :(得分:0)
您可以像这样发送数据,除非值为0或为空,否则字符串始终为TRUE。
答案 3 :(得分:0)
我发现将数组转换为对象会导致保留值。可能是因为curl在发送时将对象转换为json,php将其转换回接收端的关联数组。
$data = (object) array (
'name' => "Firstname SecondName",
'age' => 25,
'optin' => true
);