无法在PowerShell中将curl转换为Invoke-WebRequest( - 找不到-insecure / -k)

时间:2018-03-21 14:55:12

标签: powershell curl

我有原始的 curl 调用,据称是在Unix环境中工作(或者他们在提供商办公室使用的任何东西)。

curl 
  -u ybeepbeepbeepa:eboopboopboopa
  -k 
  -d "grant_type=mobile&customerId=SE.B2C/abcd&pin=1234&scope=openid" 
  -H "Content-Type:application/x-www-form-urlencoded" 
  https://xxx/oauth2/token

使用docs for curl我将标志和属性交换到以下内容。

Invoke-WebRequest 
  -User ybeepbeepbeepa:eboopboopboopa 
  -Method POST 
  -Headers @{"Content-Type"="application/x-www-form-urlencoded"} 
  -Uri "https://xxx/oauth2/token?grant_type=mobile&customerId=SE.B2C/abcd&pin=1234&scope=openid" 

我唯一无法翻译的部分是 -k ,它应该等同于 - insecure 。检查了所说的文档,我找到了一些可能的,虽然很牵强的替代方案(例如 -AllowUnencryptedAuthentication ),但所有这些都失败了,我没有想法。

  1. PowerShell的 Invoke-WebRequest 中的curl的 - insecure (或 -k )等同于什么(意外地被归为< em> curl ,由于标志不同而令人困惑,因为它们不同?)
  2. 命令的其余部分是否正确移植到PowerShell? (我已经收缩了一些标志,并将它们与URL一起作为querty字符串一起烘焙。而且我不完全确定 Headers 的语法。)

1 个答案:

答案 0 :(得分:2)

代替-k,您需要使用ServicePointManager类为应用领域设置证书验证例程:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }

对于-u标记,您自己需要enter image description here

function Get-BasicAuthCreds {
    param([string]$Username,[string]$Password)
    $AuthString = "{0}:{1}" -f $Username,$Password
    $AuthBytes  = [System.Text.Encoding]::Ascii.GetBytes($AuthString)
    return [Convert]::ToBase64String($AuthBytes)
}

$Headers = @{"Content-Type"="application/x-www-form-urlencoded"} 
$Headers['Authorization'] = "Basic $(Get-BasicAuthCreds ybeepbeepbeepa eboopboopboopa)"

Invoke-WebRequest -Method POST -Headers $Headers -Uri "https://xxx/oauth2/token?grant_type=mobile&customerId=SE.B2C/abcd&pin=1234&scope=openid"

如果你想生成内联的凭据字符串,你可以这样做(尽管它有点笨拙):

$Headers = @{
  "Content-Type"  = "application/x-www-form-urlencoded"} 
  "Authorization" = "Basic $([Convert]::ToBase64String([System.Text.Encoding]::Ascii.GetBytes('ybeepbeepbeepa:eboopboopboopa')))"
}