如何用PHP和cURL在JFrog Artifactory中创建/更新键值对?
问题:PHP 8.2 操作JFrog Artifactory API 新增/更新制品属性
背景
我使用PHP 8.2读取JFrog Artifactory API的操作完全正常,现在需要实现属性不存在时创建,存在时更新的逻辑。
读取属性的可行代码
<?PHP // 特定制品属性的完整API地址 $api = "https://mysrv/api/storage/TestProduct/TestComponent/1.0.0/?properties"; $ch = curl_init($api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "X-JFrog-Art-Api: ". $artifactoryKey, )); // 发送请求获取现有属性 $response = curl_exec($ch); echo "<pre>"; var_dump($response); ?>
读取结果示例
string(123) "{ "properties" : { "ComponentName" : [ "TestComponent" ], "ContactEmail" : [ "me@nowhere.com" ], "ContactName" : [ "John Doe" ], "VersionNumber" : [ "1.0.0" ] }, "uri" : "https://mysrv/api/storage/TestProduct/TestComponent/1.0.0" }"
需求目标
在现有属性中新增键值对MyKey: False,预期结果如下:
string(123) "{ "properties" : { "ComponentName" : [ "TestComponent" ], "ContactEmail" : [ "me@nowhere.com" ], "ContactName" : [ "John Doe" ], "VersionNumber" : [ "1.0.0" ], "MyKey" : [ "False" ] }, "uri" : "https://mysrv/api/storage/TestProduct/TestComponent/1.0.0" }"
尝试的代码及错误
我试过以下代码(及各种调整),但均执行失败:
// 定义新的键值对 $newProperty = array( 'key' => "MyKey", 'value' => "False" ); // 准备JSON请求体 $payload = json_encode(array("properties" => array($newProperty))); // 初始化cURL更新属性 $ch = curl_init($api); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'X-JFrog-Art-Api: ' . $artifactoryKey )); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); // 发送请求更新属性 $response = curl_exec($ch); echo "<pre>"; var_dump($response);
返回错误信息
string(98) "{ "errors" : [ { "status" : 400, "message" : "Properties value cannot be empty." } ] }"
确认账户拥有足够的写入/修改权限,错误与权限无关,希望得到相关解决方案。
内容的提问来源于stack exchange,提问作者Beauvais
相关产品推荐
相关产品推荐

