PowerShell을 사용하여 서버 요청 보내기
14252 단어 powershellcodenewbielearning
curl
을 직접 사용할 수 있지만, 이 문서에서는 Invoke-WebRequest
이 아니라 PowerShell cmdlet Invoke-RestMethod
과 curl
의 차이를 중점적으로 설명합니다.만약 네가 기초 지식을 좀 갱신하고 싶다면, 반드시 나의 속성 과정을 보아야 한다.
REST API에서 데이터 요청
먼저 API에서 데이터를 가져오는 방법
Invoke-WebRequest
을 살펴보겠습니다.나는 jsonplaceholder site을 예로 삼아 시작할 것이다.Invoke-WebRequest
를 사용하여 HTTP 또는 HTTPS 요청을 보낼 수 있습니다.-Uri
매개 변수에 대한 값만 제공하면 됩니다.# these are the same
Invoke-WebRequest -Uri "https://jsonplaceholder.typicode.com/users/1"
Invoke-WebRequest "https://jsonplaceholder.typicode.com/users/1"
다음은 답변입니다.StatusCode : 200
StatusDescription : OK
Content : {
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipco…
}
RawContent : HTTP/1.1 200 OK
Date: Fri, 28 Aug 2020 22:45:18 GMT
Connection: keep-alive
Headers : {[Date, System.String[]], [Connection, System.String[]], [Set-Cookie, System.String[]], [X-Powered-By, System.String[]]…}
Images : {}
InputFields : {}
Links : {}
RawContentLength : 509
RelationLink : {}
이것은 매우 간단하다, 그렇지?우리가 해야 할 일은 -Uri
매개 변수 값을 지정하고 Invoke-WebRequest
데이터를 요청하며 응답에 대한 기본적인 해석을 실행하는 것이다.당신은 우리가 웹 페이지의 실제 내용을 얻을 수 있을 뿐만 아니라 관련 메타데이터도 얻을 수 있다는 것을 보게 될 것입니다.PowerShell은 응답 데이터를 네이티브 방식으로 해석하므로 단일 응답 속성을 보려면 다음과 같이 하십시오.
# this will only display the content of response
(Invoke-WebRequest "https://jsonplaceholder.typicode.com/users/1").Content
명령 및 -Uri
매개변수가 괄호 () 에 포함되는 방법에 대해 알아볼 수 있습니다. 괄호 () 를 사용하면 점 기호를 사용하여 객체 속성에 액세스할 수 있습니다.현재, 우리는
Invoke-RestMethod
cmdlet을 사용하여 같은 데이터를 요청합니다.Invoke-RestMethod "https://jsonplaceholder.typicode.com/users/1"
다음은 답변입니다.id : 1
name : Leanne Graham
username : Bret
email : [email protected]
address : @{street=Kulas Light; suite=Apt. 556; city=Gwenborough; zipcode=92998-3874; geo=}
phone : 1-770-736-8031 x56442
website : hildegard.org
company : @{name=Romaguera-Crona; catchPhrase=Multi-layered client-server neural-net; bs=harness real-time e-markets}
응답은 JSON에서 PowerShell 객체로 자동으로 변환되며 메타데이터는 포함되지 않습니다.Invoke-WebRequest
사이의 가장 큰 차이점은 Invoke-RestMethod
자동으로 JSON과 XML 응답 데이터를 PowerShell 객체로 변환하고 Invoke-WebRequest
HTML 데이터 처리에 가장 적합하다는 것이다.Billy York의 this article를 살펴보고 그 중에서 차이를 깊이 있게 연구했다.
응답 본문을 파일에 저장
-Outfile
매개 변수를 사용하면 응답 본문을 지정된 파일에 쉽게 저장할 수 있습니다.이 예에서, 우리는 데이터를 output.json
라는 파일에 저장할 것이다.이 파일이 존재하지 않으면 PowerShell에서 이 파일을 현재 위치에 만듭니다.# the -Outfile parameter is available on both cmdlets
Invoke-RestMethod "https://jsonplaceholder.typicode.com/users/1" -Outfile output.json
Invoke-WebRequest "https://jsonplaceholder.typicode.com/users/1" -Outfile output.json
POST 요청 보내기
POST 요청은 다음
Invoke-RestMethod
을 사용하는 방법입니다.당신도 사용할 수 있습니다 Invoke-WebRequest
. 그러나 아래의 예시에 대해 우리는 Invoke-RestMethod
를 사용할 것입니다.이 예에서는 이 명령에 몇 가지 변수를 사용합니다.하나의 이름은
$url
, 포트를 저장하는 데 사용되고, 다른 이름은 $Body
, POST 요청의 본문을 저장하는 데 사용됩니다.$url = "https://jsonplaceholder.typicode.com/posts"
$Body = @{
id = 1
userId = 1
title = "sending a POST request"
body = "Lorem ipsum dolor sit amet, consectetur"
}
Invoke-RestMethod -Method "Post" -Uri $url -Body $Body
기본적으로 Invoke-RestMethod
및 Invoke-WebRequest
은 본문의 내용 유형을 application/x-www-form-urlencoded
로 설정합니다.다음과 같이 다양한 컨텐츠 유형을 쉽게 지정할 수 있습니다.## continuing the example above
Invoke-RestMethod -Method "Post" -Uri $url -Body $Body -ContentType application/json
웹 페이지에서 링크 삭제
Invoke-WebRequest
웹 페이지에서 모든 링크를 추출하는 것이 매우 쉽다.이 cmdlet은 자동으로 HTML을 해석하기 때문에, 우리는 페이지의 <a>
표시만 필요로 한다고 지적할 수 있습니다.cmdlet과 파라미터는 괄호로 묶여 있음을 다시 한 번 주의하십시오.우리는 GitHub 홈페이지를 예로 들 것이다.
(Invoke-WebRequest "https://github.com/").Links.Href
GitHub 문제 추적
이 예에서는 GitHub API와
Invoke-RestMethod
cmdlet을 사용하여 React-Native
저장소의 미해결 문제를 나열합니다.조금만 더 깊이 들어가면 특정한 수요에 따라 결과를 필터할 수도 있고, 특정한 키워드를 포함하는 개방적인 문제에만 흥미를 느낄 수도 있다.먼저 REST API가 지원하는 모든 엔드포인트 범주의 목록을 얻을 수 있습니다.
# this will return a list of available endpoints
Invoke-RestMethod "https://api.github.com"
우리에게 적합해야 할 것은 https://api.github.com/repos/{owner}/{repo}
.소유자는 facebook
, 환매는 react-native
, 우리는 또한 어떠한 미결 문제도 조회할 것이다.$url = "https://api.github.com/repos/facebook/react-native/issues?state=open"
$site = Invoke-RestMethod $url
현재, 당신은 이미 일련의 미결 문제가 있어서, 더욱 세분화할 수 있습니다.이 예에서 우리는 키워드 iOS
를 포함하는 결과만 추출합니다.비교 연산자 -Match
를 사용하여 일치 항목을 검색할 수 있습니다.# our keyword will be iOS
$keyword = 'ios'
$site -Match $keyword
일치하는 모든 결과를 $AllMatches
라는 변수에 계속 저장합니다.$AllMatches = $site -Match $keyword
현재 우리는 점 기호를 사용하여 당신이 필요로 하는 특정한 대상 속성에 접근할 수 있습니다.# list all the titles from the search
$AllMatches.title
여기에서 우리는 모든 공개 문제의 모든 제목을 보았는데, 그 중에는 우리가 정의한 keyword
가 포함되어 있다.Local images not rendered on iOS physical device for release build
Metro-bundler error: Module `@babel/runtime/helpers/interopRequireDefault` does not exist in the Haste module map
Change ScrollView.scrollIndicatorInsets to not automatically add safe area on iOS 13
Bug in TextInput's text style in android, when the text's style in changed conditionally
false trackColor prop does not work for Switch component on iOS
Fix duplicate accessibilityLabels on iOS
Double slashes instead of tripple
React-Native "react-native": "0.62.2" is not working on Android - 9.
iOS use_frameworks! broken in v0.63.2
iOS Linking getInitialURL() Cannot read, copy or use the file in the url
Update Flipper
Cannot animate shadowOffset
title
및 created_at
속성을 파일에 쓰는 것이 도움이 될 수도 있습니다. 이렇게 하면 이메일로 보내거나 데이터베이스에 추가할 수 있습니다.반복 $AllMatches
하고 특정 속성을 추출하여 파일에 저장할 수 있습니다.$IssueList = forEach($item in $AllMatches) { Write-Output $item.created_at, $item.title}
$IssuesList | Out-File -Path .\IssueReport.txt
이 예시를 계속하고 매일 업데이트를 요청하거나 팀 구성원에게 이메일을 보내거나 문제를 감시하는 데 도움이 될 수 있는 내용을 자동으로 요청할 수 있습니다.총결산
본고에서 우리는 POST 요청을 포함하여
Invoke-WebRequest
및 Invoke-RestMethod
서버 요청을 어떻게 사용하는지 보았다.웹 페이지에서 링크를 추출하고 GitHub API와 상호작용을 하여 특정 저장소와 키워드의 문제를 추적합니다.서버 요청, 해석 및
Invoke-WebRequest
과Invoke-RestMethod
에 대한 옵션, 장면과 개념이 언급되지 않은 경우도 많기 때문에 정부docs를 통해 더 많은 정보를 확인하시기 바랍니다.
Reference
이 문제에 관하여(PowerShell을 사용하여 서버 요청 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jordanholtdev/making-server-requests-using-powershell-5696텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)