CURL POST возвращает токен, но Invoke-RestMethod ничего не возвращает - PullRequest
1 голос
/ 19 марта 2020

При использовании следующей команды curl я получаю ответ 200 OK, который предоставляет токен аутентификации, который мне нужен для будущих запросов. Тем не менее, когда я пытаюсь повторить то же самое в PowerShell с помощью метода invoke-rest, приведенного ниже, я не получаю никакого ответа.

Я попытался включить многословие, и он просто говорит, что возвращено 0 байт. Я также пытался использовать -Timeoutse c, и это не имеет значения. Я также проверил строку base64 для пользователя, и пароль тот же и правильный. Я также знаю, что использую API, потому что могу коснуться других конечных точек и получить 401 несанкционированный.

Я также пытался использовать POSTMan и использовать функцию, которая позволяет пропустить команду cURL, и она создаст для вас запрос, и я получу такой же пустой / нулевой ответ.

Я смог заставить его работать в Python также без проблем.

Буду очень признателен за помощь, поскольку я не уверен, что мне здесь не хватает.

Curl call (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...