curl과 동등한 PowerShell


145

curlPowerShell에 해당하는 것이 있습니까? 유사한 기본 제공 기능이 있거나 타사 cmdlet이 있습니까?



1
사실이 질문은 나에게 공평 해 보인다? 그러나 오래된 답변이 있습니다 : stackoverflow.com/questions/340553/…
Rup

1
PowerShell에서 curl 사용에 대한이 기사를 확인하십시오. thesociablegeek.com/azure/using-curl-in-powershell
SDsolar

답변:


100

PowerShell 3.0에는 새로운 명령이 있습니다 Invoke-RestMethod.

http://technet.microsoft.com/en-us/library/hh849971.aspx

자세한 세부 사항:

https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/


8
수행하려는 작업에 따라 대신 Invoke-WebRequest 명령이 필요할 수 있습니다.
Timothy Lee Russell

28
또한 Powershell 로 curl또는 별명으로 지정되었습니다 wget.
CMCDragonkai 2016 년

18
구문이 완전히 다르기 때문에 별명을 지정하는 것이 이상합니다. MS가 패키지 관리자를 제공하고 싶지 않고 일반적인 기본 도구를 쉽게 얻을 수있게하려면 가짜 별칭 뒤에 숨겨도 상황이 더 좋아지지 않을 것입니다.
MichaelGG

1
Invoke-WebRequest의 가장 큰 문제는 IE가 '초기화'되지 않으면 작동하지 않는다는 것입니다. 따라서 파이프 라인 또는 DSC 스크립트를 작성할 때는 먼저 추가 작업을 수행하거나 Invoke-RestMethod를 사용할 수 있습니다.
LimpingNinja

1
@LimpingNinja, 이것에 대한 소스가 있습니까? "-UseBasicParsing DOM (Document Object Model) 구문 분석없이 HTML 컨텐츠에 응답 오브젝트를 사용합니다. Server Core 설치와 같은 컴퓨터에 Internet Explorer가 설치되어 있지 않은 경우이 매개 변수가 필요합니다. Windows Server 운영 체제의 문제입니다. " 에서 msdn.microsoft.com/powershell/reference/3.0/...
마이클 켈리

42

Powershell 5.0부터는 이전 버전이 아닌 경우 curl에 대한 별칭입니다 Invoke-WebRequest.

PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize

CommandType Name                      Version Source
----------- ----                      ------- ------
Alias       curl -> Invoke-WebRequest
Alias       iwr -> Invoke-WebRequest
Alias       wget -> Invoke-WebRequest

에일 리어 징 제거 명령을 사용하려면 ...

PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com

따라서 다음과 같이 요청의 여러 속성을 반환하십시오 ...

PS> Invoke-WebRequest -Uri https://www.google.com

StatusCode        : 200
StatusDescription : OK
Content           : <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-AU"><head><meta content="text/html; charset=UTF-8"
                    http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/...
RawContent        : HTTP/1.1 200 OK
                    X-XSS-Protection: 1; mode=block
                    X-Frame-Options: SAMEORIGIN
                    Vary: Accept-Encoding

... 또는 내용 만 ...

PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content

<!doctype html><html itemscope="" itemtype="http://schem[etc ...]

동등한 별칭 명령은 ...

PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content

Powershell 기본값 및 기타 별칭을 활용하면 명령을 단축 할 수 있습니다.

PS> curl https://www.google.com 
ps> curl https://www.google.com | Select -ExpandProperty Content

...하지만 권장하지 않습니다. 자세한 명령은 코드를 읽을 때 다른 사람들을 도와줍니다.

최신 정보:

Powershell 6.x

권장하지 않는 별칭 사용

현재 파워 쉘 6.x에서 "핵심은" curl 더 이상의 별칭입니다 Invoke-WebRequest(별명이 wget도 제거됩니다). 대신 Invoke-WebRequest직접 사용하십시오 .

PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize

CommandType Name                     Version Source
----------- ----                     ------- ------
Alias       iwr -> Invoke-WebRequest

RFC에서 "Windows PowerShell에서 별칭 컬 및 wget을 제거하는" 동작을 명백히 거부하더라도 Curl은 더 이상 Invoke-WebRequest (Powershell 6.2.3에서 테스트)의 별칭이 아닙니다 .

RFC는 "wget ​​/ curl 별칭은 PowerShell Core에서 이미 제거되었으므로 이러한 별칭을 갖는 문제는 Windows PowerShell로 제한되었습니다."라고 말합니다.

결론적으로 Powershell 팀은 사용자에게 "스크립트의 별칭에 의존하지 않도록"권장합니다.

@ v6ak이 PowerShell을 사용 curl하고 주석 wget(5.0 이하)에서 언급 한 것처럼 : 나란히 설치된 경우 실수로 실제 컬이나 wget을 호출합니다. 어쨌든 혼란을 유발합니다.

새로운 인코딩

(및 기타 많은 텍스트 출력 명령)을 utf8NoBOM사용할 때 기본 인코딩을 활용하려면 Powershell "core"(6.x 이상)를 업그레이드하는 것이 좋습니다 Invoke-WebRequest. 이 작업을 명시 적으로 수행 한 경우 다음과 같은 작업을 수행 할 수 있습니다.

Invoke-WebRequest ` 
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
| Select-Object -ExpandProperty Content `
| Out-File jquery.fancybox.min.js `
-Encoding utf8NoBOM 

그러나 더 짧고 암시적인 명령을 사용하는 경우에도 ...

Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js

...로 인코딩 utf8NoBOM이 완료됩니다 (예를 들어 Visual Studio Code에서 저장된 파일을 열고 상태 표시 줄에서 "UTF-8"을 확인하여이를 확인할 수 있습니다).

함께 저장된 파일 utf8NoBOM은 다양한 생태계를 여행 할 때 문제를 덜 일으키는 경향이 있습니다. 물론 다른 인코딩이 필요한 경우 다른 대안을 명시 적으로 설정할 수 있습니다.

Powershell 5.0 이하 utf8NoBOM에서는 기본값을 제외 하고는 인코딩을 사용할 수 없었습니다.

세부:


-Uri 플래그가 무엇을하고 있는지 ... 나는 '-Uri 컬을위한 또는 그것없이 동일한 결과를 얻을 수 api.github.com/rate_limit를 '. 나는 이것을 찾았지만 확실하지 않다
Drenai

1
powershell에서 일부 매개 변수 이름은 매개 변수 값의 순서에서 암시 적으로 파생 될 수 있습니다. 당신은 이것을 통해 볼 수 있습니다 get-help curl. 당신은 볼 Invoke-WebRequest [-Uri] <Uri> ...브라켓이 함께 []표시 -Uri탈락 (따라서 암시 적으로 호출) 할 수 있습니다. 주요 게시물에서 언급했듯이 일반적으로 명시 적으로해야합니다 (나중에 다른 사람이 코드를 읽을 위치).
존 벤틀리

아-고마워 그래서 나는 그것을 떠날거야,하지만 여전히 호출되고, 그것이 무슨 []짓 인지 몰랐어요
Drenai

천만에요. 당신은 그것을 얻었다. 찾은 powershell 명령에 대한 구문 설명 get-help은 일부 버전의 en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form에 제공 됩니다. Extended Backus Naur Form의 일부 버전은 여러 언어의 구문을 설명하는 데 사용되기 때문에 읽거나 훑어 보는 것이 좋습니다. 당신은에서 것을 알 수 있습니다 en.wikipedia.org/wiki/...의 괄호 [ ...]구문을 지정하는 옵션입니다.
존 벤틀리

그것은 혼란 스럽기 때문에 사용하지 않는 것이 좋습니다. Linux 용 PowerShell Core 6.1.3에서 컬 또는 wget은 별칭이 아닙니다. 원래 컬 및 wget을 참조합니다 (시스템에있는 경우). 별명이 다르기 때문에 이러한 별명 사용은 혼동 및 비 플랫폼 스크립트의 잠재적 소스입니다.
v6ak

29

우수한 커맨드 라인 쿵푸 블로그에는 curl, wget 및 관련 PowerShell 명령을 비교 하는 게시물이 있습니다 .

간단히 말해서 :

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")

또는 Powershell / .Net 버전이 DownloadString다음에 대해 2 개의 매개 변수를 허용하지 않는 경우 :

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"

이 답변DownloadFile 은 잘 작동 하는 기능을 언급합니다 .
Paul Hicks

15

Windows 용 Git을 설치 한 다음 Git bin 폴더를 경로에 넣을 수도 있습니다. Git 설치에는 무엇보다도 curl.exe가 포함됩니다. 설치 후 %programfiles(x86)%\git\binPATH에 넣으 십시오. 그런 다음 Windows 명령 프롬프트 또는 PowerShell 콘솔에서 curl 명령을 사용할 수 있습니다.



1

윈도우 에서 wget또는 curl윈도우 에서 가장 가까운 것은 비트 (Background Intelligent Transfer Service)입니다.


3
BITS가 wget이나 curl과 다른 문제를 해결한다고 생각합니다.
Donald Byrd

Http-Server에서 가져 오는 중?
akira

2
아니 :), 그것의 배경 지능 부분.
Donald Byrd


0

cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

파워 쉘

Invoke-WebRequest -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4

# or 
# $(Get-Command curl) return  "curl -> Invoke-WebRequest"
curl -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.