У меня есть этот API, который я создал с Flask (Python), и я не могу получить powershell для успешного выполнения запроса API к нему. Проблема не в API, потому что я тестировал его с почтальоном, и все работает как надо. Точнее, когда я добавляю аутентификацию токена JWT, она не работает с powershell, в моем API функции Create, Update и delete защищены аутентификацией токена JWT, а функция basi c Read вообще не имеет аутентификации. Ниже приведен код PowerShell, который я использую:
Вот функция, которая генерирует мой токен (эта часть работает, обратите внимание, что я удалил имя пользователя и пароль из функции в целях безопасности):
function get-token {
param (
[Parameter(Position=0, Mandatory=$false)]
[string]$user,
[Parameter(Position=1, Mandatory=$false)]
[string]$password
)
$body = @{
username="$user"
password="$password"
}
$jsonbody = $body | ConvertTo-Json
$uri = "https://codegenius.live/api/auth"
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Accept","application/json")
$headers.Add("Content-Type","application/json")
$response = Invoke-RestMethod -Uri $uri -Method Post -Body $jsonbody -Headers $headers
$response.access_token
}
Эта функция сгенерирует токен следующим образом:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODIyMzA2OTUsImlhdCI6MTU4MjIzMDM5NSwibmJmIjoxNTgyMjMwMzk1LCJpZGVudGl0eSI6MX0.8wZZJEGxV7P4ZzN23eZ3d5-MGJ00N5zKHuCZXn9XRuw
Вот вызов, который я пытаюсь сделать, который не работает:
$body = @{
tpl_name="my template name"
tpl_subject="my template subject"
tpl_plaintext_content="bla bla bla"
tpl_html_content="bla bla bla"
}
$authheader = "JWT " + (get-token)
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Accept","application/json")
$headers.Add("Content-Type","application/json")
$headers.Add("Authorization",$authheader)
$jsonbody = $body | ConvertTo-Json
$uri = "https://codegenius.live/api/add-email"
$response = Invoke-RestMethod -Uri $uri -Method Post -Body $jsonbody -Headers $headers
Сообщение ответа на запрос: вот этот:
Invoke-RestMethod :
500 Internal Server Error
Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server
is overloaded or
there is an error in the application.
Au caractère Ligne:25 : 17
+ ... $response = Invoke-RestMethod -Uri $uri -Method Post -Body $jsonbody ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-
RestMethod], WebEx
ception
+ FullyQualifiedErrorId :
WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Это очень странно, потому что, как я сказал, он работает с Почтальоном (см. изображения ниже), я попытался найти проблему, но не нашел подсказки, как на самом деле решить эту проблему. РЕДАКТИРОВАТЬ: изображения показывают, что в почтальоне я использовал http вместо https, это не проблема. В PowerShell http или https ничего не работает!