php - 使用 PHP 和 cURL 发送数据时保留 post 字段的数据类型

标签 php http post curl

我知道 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/

相关文章:

php - 提高 PHP GD 生成图像的质量

android - 如何使用android应用程序将数据发送到网站

php - 使用 jQuery.ajax() 发送和使用 POST 变量

php - 如何显示来自特定类别的一个特定 WP 帖子(提取的 ID)

php - yii2 - 从 View 重定向到另一个 View

javascript - 未捕获的 InvalidValueError : not an Array

node.js - NodeJS 应用程序仅继续 6 个打开的连接

python - 新程序员,坚持使用 python http 请求

javascript - 防止通过双击执行两次 jQuery post 请求

php - 如何使用 CakePHP3 定义多对多关系?