在终端中使用 cURL 发布数组

Posted

技术标签:

【中文标题】在终端中使用 cURL 发布数组【英文标题】:Posting array using cURL in Terminal 【发布时间】:2014-05-09 12:31:18 【问题描述】:

我正在尝试为应用程序构建网络服务,因此数据存储在我拥有的在线数据库中。我目前正在构建 php 文档,我很好奇如何在 Mac 终端应用程序 中使用 cURL POSTarray

您会看到,应用程序将向 Web 服务发送一个由字符串组成的数组。例如像这样的["String 1", "String 2", "String 3"]。 但是为了测试我将这些值插入数据库的代码是否有效,我需要以某种方式将这些数据传递给 web 服务。到目前为止,我一直在使用 Mac 终端应用程序 并像 curl -F "user_id=1" localhost/test/webservice.php" 这样发布,但我不知道如何传递数组。

到目前为止,我所拥有的是:

curl -F "user_id=1" -F "title=Random title 123" -F "num_items=2" -F "items[]=[Item 1, Item 2]" localhost/test/webservice.php

但我认为这不是传递数组的正确方法,因为我相信我的 php 文档中的代码是正确的,但是存储在我的数据库中的值实际上是单词 array强>。我相信items[] 是启动它的正确方法,但我不太确定=-sign 之后的内容。

有人知道正确的做法吗?

如果这恰好是正确的,那么我在数组中存储数据的方式就有问题。我正在使用 stmtbind_param() 关键字,如下所示:

$items = $_POST["items"]; // This is the array

$stmt = $this->db->prepare('INSERT INTO items (item_id, user_id, title) VALUES (?, ?, ?)');
$stmt->bind_param('iis', $item_id, $user_id, $items);
$stmt->execute();
$stmt->close();

我想要实现的基本上是使用一个插入语句将数组中的所有值发布到数据库中。如果这是错误的,那么正确的做法是什么?

感谢所有帮助!

谢谢。

【问题讨论】:

【参考方案1】:

首先确保您要执行-F(对于multipart/form-data)或-d(对于application/x-www-form-urlencoded)。在任何一种情况下,您应该如何传递数组:

-F "items[]=Item 1" -F "items[]=Item 2"

或使用-d

-d "items[]=Item 1" -d "items[]=Item 2"

您的服务器将收到以下格式的数据:

[items] => Array
    (
        [0] => Item 1
        [1] => Item 2
    )

【讨论】:

非常感谢!正是我想要的! :) 这也可以:-d "items[]=Item 1&items[]=Item 2"

以上是关于在终端中使用 cURL 发布数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 7 Docker 快速启动终端中运行 curl 命令的问题

无法从 Apple 终端访问 SSL 站点和神秘的 curl 错误

使用MAC终端下载文件(cURL)

计算终端输出中的行数

Ubuntu:使用 curl 下载图像

curl终端请求json