Curl을 Invoke-WebRequest로 변환

Curl을 Invoke-WebRequest로 변환

아래에는 이 작업에 컬을 사용하는 스크립트 코드가 있습니다. powershell의 Invoke-WebRequest를 사용하여 동일한 코드를 복제하고 싶습니다. 그것을하는 방법.

$FX_USER=$args[0]
$FX_PWD=$args[1]
$FX_JOBID=$args[2]
$REGION=$args[3]
$FX_HOST=$args[4]

$runId=$(curl -k --header  "Content-Type: application/json;charset=UTF-8" -X POST -d '{}' -u ""${FX_USER}":"${FX_PWD}"" ""${FX_HOST}"/api/v1/runs/job/${FX_JOBID}?region=${REGION}" | jq -r '."data"|."id"')
Write-Host "runId = $runId"

답변1

$FX_USER=$args[0]
$FX_PWD=$args[1]
$FX_JOBID=$args[2]
$REGION=$args[3]
$TAGS=$args[4]
$SUITES=$args[5]
$CATEGORIES=$args[6]
$FX_HOST=$args[7]

Write-Host "user = ${FX_USER}"
Write-Host "region = ${REGION}"
Write-Host "jobid = ${FX_JOBID}"
Write-Host "hostname = ${FX_HOST}" 



$pair = "${FX_USER}:${FX_PWD}"
Write-Host "$pair"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
Write-Host "$base64"
$basicAuthValue = "Basic $base64"
Write-Host "$basicAuthValue"
$headers = @{ Authorization = $basicAuthValue }
Write-Host "$headers"

add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
        ServicePoint srvPoint, X509Certificate certificate,
        WebRequest request, int certificateProblem) {
        return true;
    }
}
"@
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy







$runId=$((Invoke-WebRequest  -Uri "${FX_HOST}/api/v1/runs/job/${FX_JOBID}?region=${REGION}"   -Headers $headers -Method POST  -ContentType "application/json;charset=UTF-8" ) | ConvertFrom-Json  | select -expand data | select -expand id)

Write-Host "runId = $runId"

답변2

cmdlet을 읽고 연습하고 도움말 파일의 예제를 사용해 완전히 익히셨나요?

# get function / cmdlet details
(Get-Command -Name Invoke-WebRequest).Parameters
Get-help -Name Invoke-WebRequest -Full
Get-help -Name Invoke-WebRequest -Online
Get-help -Name Invoke-WebRequest -Examples

Invoke-WebRequest로 수행 중인 작업이 성공했는지 여부를 확인해 보셨나요? 어떤 오류가 발생했습니까?

PowerShell은 Curl을 Invoke-WebRequest의 별칭으로 사용합니다. 물론 그것들은 동일한 것이 아니므로 동일하게 복제할 수 없습니다.

웹 cmdlet은 PSv5x 이하보다 PSCore(Windows/Linux/OSX)가 향상되었습니다. 사이트 연결 문제가 발생하지 않도록 하려면 다음을 사용하세요.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 

...귀하의 코드에서. PSCore는 Windows PowerShell과 함께 실행되도록 설계되었으나 이를 대체하지는 않습니다.

cmdlet 사용 cUrl과 Invoke-WebRequest

$headers = @{
  'X-JFrog-Art-Api' = $apiKey
  "Content-Type" = "application/json"
  "Accept" = "application/json"
}
Invoke-WebRequest -InFile $file -Method Put -Uri "$ARTIFACTORY_HOST/third-party/test/readme.md" -Headers $headers -Verbose


curl -T readme.md "${ARTIFACTORY_HOST}/third-party/test/readme.md " \
-H "X-JFrog-Art-Api: ${apiKey}" \
-H "Content-Type: application/json" \
-H "Accept: application/json"

원하는 경우 PowerShell에서 직접 컬.exe를 사용할 수도 있습니다.다른 외부 exe와 마찬가지로.

관련 정보