我正在使用PHP 8.2来读取我们的JFrog Artifactory API,这很好用。现在我需要create
或update
工件上的一些 * 属性 *-所以如果工件不存在,则create
它,如果工件存在,则update
它。
例如,我可以用下面的代码读取特定工件的所有 properties:
<?PHP
// The full URL for the specific artifact and its "properties"
$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,
));
// Execute the request to retrieve existing properties
$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"
}"
现在我想在properties
中创建一个新的键/值对。例如,如果我想创建一个名为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"
}"
我尝试了各种解决方案,如:
// Define the new key/value pair
$newProperty = array(
'key' => "MyKey",
'value' => "False"
);
// Prepare the JSON payload
$payload = json_encode(array("properties" => array($newProperty)));
// Initialize cURL to update the properties
$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);
// Execute the request to update the properties
$response = curl_exec($ch);
echo "<pre>";
var_dump($response);
...还有各种各样的调整,但我不能让它工作。执行上述解决方案会给予此错误:
string(98) "{
"errors" : [ {
"status" : 400,
"message" : "Properties value cannot be empty."
} ]
}"
我的帐户 * 应该 * 有足够的访问权限来写/修改(我不是管理员,但被告知),但错误消息看起来也不像是与权限相关的,所以任何帮助都将不胜感激-我希望这可能是一个简单的修复,因为我没有太多处理Artifactory东西的经验:-)
1条答案
按热度按时间fumotvh31#
事实上,我自己也发现了这一点,这是一个愚蠢/简单的错误。在找到正确的帮助页面后,我很容易地解决了这个问题-我可能应该在一开始就投入更多的时间来找到这个:-)
让我先展示一下解决方案:
这段代码将导致一个
HTTP Status 204 (No Content)
,这等于成功,它将创建一个新的属性,名为MyKey
,值为False
。cURLPUT
命令将用于 * 创建 * 它或 * 更新 * 值。在这里找到它的帮助,https://jfrog.com/help/r/jfrog-rest-apis/set-item-properties