如何在 PHP 中使用 cURL/HTTP 将数据插入 CloudTables 数据库?错误:需要 API 密钥

Posted

技术标签:

【中文标题】如何在 PHP 中使用 cURL/HTTP 将数据插入 CloudTables 数据库?错误:需要 API 密钥【英文标题】:How to Insert data to CloudTables database using cURL/HTTP in PHP? Error: API Key is required 【发布时间】:2021-12-17 06:16:45 【问题描述】:

我正在使用 cURL 请求向 CloudTables 数据库中插入一行。以下是他们的 [文档][1] 上提供的示例 cURL 请求:

curl \
    -X POST \
    -d key=:apiKey \
    https://sub-domain.cloudtables.io/api/1/dataset/:id

在哪里

:apiKey 是用于访问的 API 密钥(见下文) :id 是数据集 id(一个 UUID),

下面是我的 php 代码:

    $post = array(
        'clientId' => $user_id,
        'clientName' => $user_email,
        'dp-01' => $user_id,
        'dp-02' => $user_type,
        'dp-03' => $fullname,
        'dp-04' => $address,
    );

    $ch = curl_init('https://sub-domain.cloudtables.io/api/1/dataset/my-dataset-id');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('key: my-api-key'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    $response = curl_exec($ch);
    curl_close($ch);

但每次回复都说:

[
  
     "msg":"API key is required",
     "name":"key"
  
]

为什么!!!发送 API 密钥的正确方法是什么?

我还尝试在 $post 数组和 URL 中发送 API 密钥,但得到相同的响应。 [1]:https://cloudtables.com/docs/cloud/api/rest/post-dataset

【问题讨论】:

curl -d 不是用于设置标头中的值,而是用于数据 (curl.se/docs/manpage.html#-d)。尝试将 key 和 apiKey 放入 $post 数据中。 @Alan 已经尝试将 "key" => "APIKey" 放入 $post 但仍然遇到同样的错误! 为 CURLOPT_POSTFIELDS 传递一个数组,将使它发送一个 multipart/form-data 请求 - 也许 API 不喜欢这些?试试curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));,看看会不会有什么改变。 谢谢@CBroe;它现在正在工作!我要求您将此作为答案发布,以便我可以将其标记为解决方案。所以它可以帮助别人。 ` $post = array( 'key' => 'my-api-key', 'clientId' => $user_id, 'clientName' => $user_email, 'dp-01' => $user_id, 'dp-02' => $user_type, 'dp-03' => $fullname, ); $ch = curl_init('sub-domain.cloudtables.io/api/1/dataset/my-dataset-id'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); $response = curl_exec($ch); curl_close($ch); ` 【参考方案1】:

CURLOPT_POSTFIELDS 传递一个数组,将使它发送一个multipart/form-data 请求——而API 显然需要application/x-www-form-urlencoded

改用curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

【讨论】:

以上是关于如何在 PHP 中使用 cURL/HTTP 将数据插入 CloudTables 数据库?错误:需要 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章

php中的file_get_contents或curl?

Jenkins - 如何使用 curl、http 发送布尔参数?

curl 将数据发布到 HTTP/1.1,即使使用 APNs 的 http2 选项

谁能给我一个 PHP 的 CURLFile 类的例子?

php curl HTTP请求

从另一个网站的 html 表中检索一行?