当使用下面的curl命令时,我得到了一个200 OK响应,它提供了我将来请求所需的auth令牌。但是,当我尝试使用下面的invoke-restmethod在PowerShell中复制同样的东西时,我根本没有得到任何响应。
我试过打开verbose,但它只是说返回0字节。我也试过使用-Timeoutsec,但没有什么区别。我还验证了user和pass的base64字符串是相同的,并且是正确的。我还知道我击中了API,因为我可以接触其他端点,并获得401未授权。
我也尝试过使用POSTMan,使用允许您传递cURL命令的特性,它将为您构建请求,我得到了相同的空/null响应。
我已经能够让它在Python中工作,没有问题。
我真的很感激你的帮助,因为我不知道我错过了什么。
curl 呼叫(200 OK):
curl -qgsSkH --no-progress-bar --header "Authorization: Basic SDFLKJSLKDJFLKJWERFV3Fh1RHZjIyQl" -D auth.txt -F form=foo https://10.10.10.10:443/ENDPOINT/v6/auth/login -vvv**
Python代码也可以:
import requests
import base64
base_url = 'https://server.domain.com/ENDPOINT/v6/auth/login'
username = 'APIAccount'
password = 'PASSWORD' # Since only alphanumeric characters are alloowed, this should be an extra long password.
credentials = (username + ':' + password).encode('utf-8')
base64_encoded_credentials = base64.b64encode(credentials).decode('utf-8')
headers = {
'Authorization': 'Basic ' + base64_encoded_credentials
}
resp = requests.post(base_url, headers=headers, verify=False)
print(headers)
print('Status:', resp.status_code)
PowerShell代码(无输出):
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = $null
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$USER = "APIAccount"
$password = 'PASSWORD'
$HeaderAuth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $USER, $password)))
$SessionHeader = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$SessionHeader.Add('Authorization',('Basic {0}' -f $HeaderAuth))
$SessionHeader.Add('Accept','application/json')
$SessionHeader.Add('Content-Type','application/json')
$URL = "https://server.domain.com/ENDPOINT/v6/auth/login"
$APIResponse = Invoke-RestMethod -Method POST -Uri $URL -Headers $Sessionheader -Verbose -TimeoutSec 33
1条答案
按热度按时间slhcrj9b1#
而使用Invoke-WebRequest则可以达到这个目的。