为什么PowerShell无法发送正确的Crumb?

3

我的PowerShell脚本:

$Params = @{
    uri     = "http://${API_URL}:${API_Port}/crumbIssuer/api/json";
    Method  = 'Get';
    Headers = @{
        Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$(${API_User}):$(${API_Pass})"));
    }
}

$API_Crumb = Invoke-RestMethod @Params

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Jenkins-Crumb", $API_Crumb.Crumb)

$Params = @{
    uri     = "http://${API_URL}:${API_Port}/job/${API_Job}/build";
    Method  = 'Post';
    Headers = $headers;
}

Invoke-RestMethod @Params

错误:

请求中未包含有效的crumb

1个回答

6

我按照以下方式修改了代码,现在它可以正常工作。不过我不确定为什么之前的代码会报错。

$API_User = "admin"
$API_Pass = "password"
$API_URL = "localhost"
$API_Port = "8080"
$API_Job = "test01"

$h = @{}
$h.Add('Authorization', 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$(${API_User}):$(${API_Pass})")))

$Params = @{uri = "http://${API_URL}:${API_Port}/crumbIssuer/api/json";
        Method = 'Get';
        Headers = $h;}
$API_Crumb = Invoke-RestMethod @Params

$h.Add('Jenkins-Crumb', $API_Crumb.crumb)
$Params['uri'] = "http://${API_URL}:${API_Port}/job/${API_Job}/build"
$Params['Method'] = 'Post'
$Params['Headers'] = $h

Invoke-RestMethod @Params

1
你尝试过使用 UTF8.GetBytes 而不是 ASCII.GetBytes 吗?否则像 "pásswörd" 这样的密码可能会导致异常。 - Andrew Morton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接