由于重定向,您会出现这种行为;当向重定向位置发出此附加请求时,不会包含授权标头。
PowerShell 6.0.0版本
保留授权OnRedirect
指示cmdlet应跨重定向保留授权标头(如果存在)。
默认情况下,cmdlet会在重定向之前剥离授权标头。指定此参数将在需要将标头发送到重定向位置的情况下禁用此逻辑。
Invoke-WebRequest reference
作为一个
,如果您不在PowerShell 6上,则可以使用更低级的脚本来解决此问题
System.Net.WebRequest
它定义了一个属性
AllowAutoRedirect
False
为了在成功投递后跳过重定向,避免了401错误。
请注意,您必须自己处理数据/正文格式(json、formurlencoded等)和http头。
注意这条线
AllowAutoRedirect = $false
.
$creds = "$($BASIC_AUTH_USER):$($BASIC_AUTH_PASS)"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($creds))
$basicAuthValue = "Basic $encodedCreds"
$url = "http://your.url"
$request = [System.Net.WebRequest]::CreateHttp($url);
$request.Method = "post"
$request.Headers.Add("Authorization", $basicAuthValue)
$request.AllowAutoRedirect = $false
$body = "your formatted data goes here"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($body);
$stream = $request.GetRequestStream()
$stream.Write($bytes, 0, $bytes.Length);
$stream.Close();
$request.GetResponse();