我知道 HTTP POST 表单数据作为字符串值发送到服务器端,我必须将它们转换为 bool 值或整数等。
但我的问题是:是否可以使用 cURL 发布数据,同时保留值的类型?
例如:
以下 PHP 代码准备 PHP 数据数组,其中“age”是一个 int,“optin”是一个 bool 值,然后通过 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);
我在测试脚本上有以下代码,上面的代码将数据发布到其中。该脚本只是读取进入其中的所有内容,并将所有内容转储到文本文件中。
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"
}
正如你所看到的,所有值都被转换为字符串类型, bool 值 true 被转换为字符串“1”。
在另一个测试中, bool 值 false 作为空字符串 '' 发送。
有什么方法可以保留数据类型吗? 也许通过设置特定的 curl 选项? 或者这根本不可能?
如果 cUrl 始终将 bool 值转换为字符串,是否有任何硬性规则规定另一端期望什么值?即 bool true 总是字符串“1”而 false 总是空字符串吗?
感谢您的帮助。
最佳答案
这个问题的答案在于 PHP 将原始类型转换为字符串的方式。它唯一可能通过 HTTP 和 cURL 以字符串形式发送数据,因此 php 使用 PHP 的类型杂耍系统将非字符串值转换为字符串。
请查看PHP documentation for how PHP cast non-string values using it's type juggling system
关于php - 使用 PHP 和 cURL 发送数据时保留 post 字段的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446946/