什么是等价的
curl -u username:password ...
在PowerShell的Invoke-RestMethod
中?我试过了:
$securePwd = ConvertTo-SecureString "password" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($username, $securePwd)
Invoke-RestMethod -Credential $credential ...
但它返回401,未授权。
9条答案
按热度按时间oprakyz71#
到目前为止,这是唯一对我有效的方法:
但我不相信没有更好的办法。
xfb7svmp2#
我不知道为什么
-Credential
参数在您的示例中不起作用,但它可以用于httpbin service。你可以试试这个:
pnwntuvh3#
当方法单独失败时,似乎应该将它们合并起来。
创建凭据并将其添加到请求中。
创建标头并将其添加到请求中。
l5tcr1uw4#
laximzn55#
此版本使用
Get-Credential
的PSCredential
对象。它还可以在PowerShell 6.0中跨平台工作。它通过避免使用BSTR调用来做到这一点,当尝试从PSCredential
提取密码时,有时会建议使用BSTR调用。hts6caw36#
我发现如果你预先创建了一个带凭据的WebRequestSession对象,使用
-WebSession
参数是可行的,我不会重复如何创建PS凭据对象,因为这已经在其他答案中涉及到了。这种方法在第一次调用时发送auth报头,因此避免了401响应。
顺便说一句,这种方法也可以用于设置代理详细信息(当使用参数指定时,并不是所有版本的PS都能正常工作),并在API需要时处理cookie。
hxzsmxv27#
您基本上需要将用户名和密码对作为编码的凭证变量传递给
Invoke-RestMethod
。对我有效的方法如下:
注意如何将请求参数提取到
$parameters
中以避免命令膨胀。wlp8pajw8#
我知道这是一个很老的问题,但我想在某个地方分享一个更新。我找到的关于使用PowerShell进行基本身份验证的帖子没有一个适合我。经过多次反复试验和阅读MS文档后,我发现我需要使用
-AllowUnencryptedAuthentication
参数,因为我使用http连接。我还必须升级PS版本才能访问该参数。根据参数的说明:允许通过未加密的连接发送凭据和机密。默认情况下,为Credential或任何Authentication选项提供不以https://开始的URI将导致错误,请求将中止,以防止无意中通过未加密的连接以纯文本形式传递机密。若要覆盖此行为,请提供AllowUnencryptedAuthentication参数,风险自负。
ssm49v7z9#
我花了几天的时间没有任何运气与上述例子。最终我工作了我需要指定的方法后。例如: