CURL POST返回标记,但Invoke-RestMethod不返回任何内容

h9vpoimq  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(128)

当使用下面的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
slhcrj9b

slhcrj9b1#

而使用Invoke-WebRequest则可以达到这个目的。

相关问题