在 PowerShell 5 中将 curl API 调用转换为 Invoke-WebRequest



我已经做了一堆搜索,但到目前为止没有任何帮助我解决这个问题。任何帮助,不胜感激。

我正在尝试将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,因为我们希望在收到数据后对其进行解析。任何帮助将不胜感激。

如果我在没有-d "{}"的情况下提交curl命令,则该命令将失败,因此该部分是必需的。我猜服务器期望接收特定数量的数据。

我不确定发生了什么来阻止回应。我已经尝试从我正在执行PowerShell脚本的同一台机器上curl并且它可以工作。我什至使用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

更新:

@MikeW 我必须更详细地查看您的 PS 代码,您能否发布整个 API 调用减去敏感信息(api 密钥等(?

此外,附带说明一下,有时只是在 URI 上传递参数也一样。您是否尝试过通过 URI 传递参数?您可以看到以下我仅使用 URI 进行的 API 调用示例:

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

最新更新