본문 바로가기
관리자

Programming-[Base]/etc.

[TIL] Windows Powershell 사용해서 동시 웹 요청 보내기

728x90
반응형

 

1. Windows의 Powershell

 

Windows의 powershell은 CLI 기반의 툴로, 기본적으로 windows에 내장되어있는 cmd에 비해 더 많은 기능을 갖는 명령줄 실행기이다. CMD에서 접근할 수 없는 시스템 관리 작업이나 외부 프로그램 접근 등이 가능하다. 

 

source: PoweShell과 CMD의 차이점

 

PowerShell은 따로 설치해야한다. 아래 링크에서 .msi 파일을 받아서 설치하면 된다.

source: PowerShell Download

 

 


 

2. 요청 보내기

 

Headers값 설정

Get 요청은 Header와 URI 값만 보내면 된다. 아래 코드를 적절히 수정해서 붙여넣고, 엔터를 쳐서 $Headers 변수에 header 값들을 객체형태로 저장할 수 있다.

 

$Headers = @{}
$Headers.Add("Authorization", "Bearer eyJhb...")
$Headers.Add("Content-type", "application/json")
$Headers.Add("Accept", "*/*")
$URI = "https://www.naver.com"
$Headers.Add("Method", "Get")

 

Body값 설정

body값도 json 형태로 보낼 수 있다. 다만 맨 마지막에 | ConvertTo-Json 이라는 문구를 적어서 json 형태로 초기화해주면 된다.

 

 $body_json = @{
   saveInputXxx =
 @(
      @{
           date = "2023-10-08"
           id = 1007
           item_id= 21
    })} | ConvertTo-Json

 

-> @{ .. } 은 객체, @( ... ) 은 배열을 의미한다.

 

 

요청 보내기

위 값대로 설정 됬으면, Invoke-RestMethod 명령어를 통해 요청을 보낼 수 있다. headers 내부에 method 값을 지정했지만, -Method 옵션을 통해 요청 method를 직접 지정할 수도 있다.

 

$Test = Invoke-RestMethod -Uri $URI -Method Get -Header $headers -Body $body_json

 

그리고 나서 $Test를 입력하여 실행해보면, response가 오는 것을 확인할 수 있다.

naver로 GET request 결과

 


 

3. 동시 요청 보내기

 

동시요청은 요청 사이에 &&를 넣어주면 된다. 위 예시에서 $Test에 요청을 담았으므로, 3번의 동시 요청을 보낼려면 아래 문법처럼 동시 요청을 보내면 된다.

 

$Test && $Test && $Test

-> update. 잘 안될때가 있어서, api 호출 구문을 &&로 묶어서 여러번 처리하면 확실한 것 같다.

Invoke-RestMethod -Uri $URI -Method Get -Header $headers -Body $body_json && Invoke-RestMethod -Uri $URI -Method Get -Header $headers -Body $body_json && ...

 

 

다만, 위 && 문법은 PowerShell 7버전 이상에서만 동작한다고 한다. 혹시라도 7버전 이하인지 확인할려면 아래 구문을 입력한다.

$PSVersionTable

 

자세한 내용은 참조 2의 링크를 보면 되고, 설치는 그냥 PowerShell에서 아래 문구를 입력하고 좀 기다리면 설치 프로그램이 동작한다. 이후에 PowerShell 7 프로그램을 실행하여 && 문법을 실행하면 된다.

iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

 


참조

1. Powershell body json convert

https://stackoverflow.com/questions/50649349/powershell-invoke-webrequest-w-json-body-can-not-deserialize

 

 

2. 동시요청 && Powershell 버전 7이상

https://jae04099.tistory.com/entry/Console-PowerShell-%EC%97%B0%EC%82%B0%EC%9E%90

728x90
반응형