Powershell

HTTP 요청 보내기 ( Invoke-WebRequest / Invoke-RestMethod )

김모우 2020. 12. 25. 17:30
728x90
반응형

 

Powershell의 Invoke-WebRequest, Invoke-RestMethod를 이용하여 HTTP 요청을 보내는 방법에 대해서 알아보도록 하겠습니다. 실직적인 데이터 비교를 위해 이전에 구성한 Zabbix 서버를 활용하여 데이터 정상 송/수신 체크를 진행해보도록 하겠습니다. Zabbix 서버가 없으시면 오래 걸리는 작업은 아니므로 Zabbix 관련 포스트를 참조하여 구성을 하시거나, 원리만 파악하시기 바랍니다. Zabbix의 부가적인 작업을 하기위해 HTTP POST 요청을 통하여 Auth 토큰을 구해보겠습니다.

 

 

1.  Invoke-WebRequest / Invoke-RestMethod 비교

 

- Invoke-WebRequest
  : 인터넷의 웹 페이지로부터 컨텐츠를 얻어옴
  : 주요 옵션
    a. Uri - 컨텐츠를 얻어올 웹페이지 주소
    b. Body - 요청의 본문을 지정, 본문은 헤더 뒤에 오는 요청의 내용
    c. Credential - 실행 시 인증 정보를 받아옴
    d. Method - 요청 실행 방법을 선택 Get, Post, Delete 등
    e. Outfile - 결과 값을 저장할 위치 및 파일이름



- Invoke-RestMethod
  : HTTP 또는 HTTPS 요청을 RESTful 웹 서비스로 전송
  : 주요 옵션
     a. Uri - 컨텐츠를 얻어올 웹페이지 주소
     b. Headers - 요청의 헤더를 지정, 해쉬 테이블이나 딕셔너리 타입의 입력
     b. Body - 요청의 본문을 지정, 본문은 헤더 뒤에 오는 요청의 내용
     c. Credential - 실행 시 인증 정보를 받아옴
     d. Method - 요청 실행 방법을 선택 Get, Post, Delete 등
     e. Outfile - 결과 값을 저장할 위치 및 파일이름
     f. ContentType - 컨텐츠 타입을 지정



- 직접 사용을 해보니 가장 와 닿는 차이는 데이터를 반환하는 방식이였고, 아래 내용에서 추가적으로 다루겠지만 Invoke-RestMethod 의 경우 XML, JSON 등의 결과 처리에 용이하고, Invoke-Webrequest 의 경우 단순 파일 다운로드나 HTML 요청 처리에 용이한 것으로 보입니다.

- 이어서 아래 내용에서 두 개의 커맨드로 모두 요청을 보내보고 결과 차이에 대해서 비교해보겠습니다.

 

 

2. Zabbix API 구조 파악

 

-  Zabbix API 구조 파악을 위해 Zabbix 공식 Dcou를 참조해줍니다.

                         URL: https://www.zabbix.com/documentation/current/manual/api

- Auth 토큰을 획득을 위해 API 탭의 user->user.login 부분을 확인 합니다.
- 아래와 같이 요청이 구성되어 있습니다.

 

 

3. Invoke-RestMethod 코드 작성 - 1

 

- Zabbix login을 위한 user 정보 획득 (Get-Credential)
- Zabbix API 요청 작성
- ContentType = "application/json-rpc"
- Method = "Post"
- URL = "[Zabbix 서버 주소]/zabbix/api_jsonrpc.php"
- JSON 요청으로 변경

- 위의 내용을 바탕으로 1차적으로 zabbix_login 이라는 함수를 작성하였습니다.



- 결과 값을 출력해보면 아래와 같으며 @{ } 딕셔너리 형태로 바로 $response.result 형태로 데이터 출력이 가능합니다.


 

 

4. Invoke-WebRequest 코드 작성 - 1

 

- params 변수를 선언하여 그 안에 딕셔너리 형태로 작성
- zabbix_login2 함수를 작성해줍니다.


- 결과 값 출력 시 아래와 같이 단순 텍스트 형식으로 출력
- 그러므로 원하는 형태로 데이터 출력시 데이터를 별도로 분리해주거나, ConvertFrom-Json 명령어 형태 변환 작업이 한 번 필요합니다.

 

 

5. Invoke-RestMethod 코드 작성 - 2

 

- 위의 Invoke-WebRequest를 이용한 함수를 바탕으로 Invoke-RestMethod 코드를 정리해줍니다.


- 아래와 같이 데이터 정상 출력 됩니다.

 

728x90
반응형