如何在 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 密钥的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins - 如何使用 curl、http 发送布尔参数?