我正在通过 docker 在
localhost:5984/
托管 couchdb 的本地实例。
使用 python requests 客户端,我可以通过 API 进行管理更改,如下所示:
>>> requests.put('http://admin:password@localhost:5984/testdb').json()
{'ok': True}
但是,当尝试使用 Windows HTTP 客户端时,couchdb 说我不是管理员用户。我将此解释为身份验证失败。
> Invoke-WebRequest -Method PUT http://admin:password@localhost:5984/testdb
Invoke-WebRequest : {"error":"unauthorized","reason":"You are not a server admin."}
At line:1 char:1
+ Invoke-WebRequest -Method PUT http://admin:password@localhost:5984/te ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Invoke-WebRequest
是否具有某种阻止在 URL 方案中嵌入凭据的行为?
Invoke-WebRequest
不支持在 URL 中插入用户名和密码。相反,您有两个选择:
Get-Credential
构建用户名/密码凭证,然后使用 Invoke-WebRequest
参数将其传递给 -Credential
。例如:$cred = Get-Credential "admin" # this will prompt you for the password
Invoke-WebRequest -Credential $cred -Method PUT http://localhost:5984/testdb
-Headers
参数将其作为基本身份验证标头传递。例如:$auth = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("admin:password"))
Invoke-WebRequest -Headers @{Authorization = "Basic " + $auth} -Method PUT http://localhost:5984/testdb