Преобразование вызова API Curl в Invoke-WebRequest в PowerShell 5 - PullRequest
0 голосов
/ 18 октября 2018

Я провел кучу поисков, но ничто не помогло мне решить эту проблему.Любая помощь приветствуется.

Я пытаюсь преобразовать команду curl в Invoke-WebRequest, но по какой-то причине я не получаю ответ.Я попытался:

$headers = @{
    outh_a    = "WEBREQ";
    oauth_key = "key";
    etc...
}

Invoke-WebRequest -Uri $url -Method POST -Body "{}" -Headers $headers -Verbose

Команда curl выглядит следующим образом:

.\curl.exe -x POST -d "{}" -H "oauth_a: WEBREQ" -H "oauth_key:key" -H "Content-Type: application/json" -H "oauth_sm:HMAC-SHA2" -H "oauth_t:timestamp"-H "oauth_s:key+signature=" "https://example.com/services/api/request?t=data&a=data2&n=404&i=0"

Команда работает отлично и возвращает данные.Я использую PowerShell, так как мы хотим проанализировать полученные данные.Любая помощь будет принята с благодарностью.

Команда curl не будет выполнена, если я отправлю ее без -d "{}", поэтому эта часть является обязательной.Я предполагаю, что сервер ожидает получения определенного количества данных.

Я не уверен, что происходит, чтобы предотвратить ответ.Я пробовал curl с той же машины, на которой я выполняю сценарий PowerShell, и он работает.Я даже использовал SoapUI для того же вызова, и он тоже работает там.

Редактировать :

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[System.Net.WebRequest]::DefaultWebProxy.Credentials = 
[System.Net.CredentialCache]::DefaultCredentials
[Net.ServicePointManager]::SecurityProtocol = 
[Net.SecurityProtocolType]::Ssl3, [Net.SecurityProtocolType]::Tls, 
[Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12

$Domain = "https://example.com/services/api/request?t=oauth_auth_token&a=appid&n=404&i=0"

# OAUTH Authorization Request Header

$Header = @{
    o_nonce = 'TEST'
    o_con_key = 'key'
    o_sig_meth = 'type'
    o_timestamp = 'timestamp'
    o_sig = 'signature'
    o_ver = '1.0'
    o_realm = 'http://example.com/services'
} 

$Body = @{}

$API_Response = Invoke-RestMethod -Method POST -Headers $Header -Uri $Domain -Body $Body -Verbose -TimeoutSec 20

1 Ответ

0 голосов
/ 19 октября 2018

Обновление:

@ MikeW Мне бы пришлось взглянуть на ваш код PS более подробно, не могли бы вы опубликовать весь вызов API за вычетом конфиденциальной информации (ключ API и т. Д.)? *

Кроме того, на заметку, иногда просто передача параметров по URI также работает.Вы пытались передать параметры через URI?Вы можете увидеть следующий пример вызова API, который я выполняю, используя только URI:

Invoke-RestMethod -Uri ("$EndpointURL/Tickets/$TicketID/?username=$ServiceAccount&apiKey=$APIKey");
...