invoke-webrequest 프로 팁

Invoke-WebRequest PowerShell cmdlet은 예를 들어 wget.exe와 같은 추가 도구를 설치하지 않고 일부 웹 페이지의 출력을 가져와 작업하려는 경우에 유용합니다. 어쨌든 웹 페이지에서 일부 텍스트 구문 분석을 수행할 계획이라면 PowerShell은 훌륭한 옵션이므로 전체 PS 모드로 전환하지 않겠습니까?
불행히도 이 명령에는 몇 가지 단점이 있어 일반 텍스트를 원할 때보다 훨씬 느려지고 응답 구문 분석으로 인해 잠기고 결과가 전혀 반환되지 않을 수도 있습니다.

다음은 PowerShell을 사용하여 빠르고 효과적으로 출력을 구문 분석하기 위한 몇 가지 전문가 팁입니다.

1. 기본 구문 분석 사용



cmdlet은 기본적으로 Internet Explorer를 사용하여 일부 DOM 구문 분석을 수행합니다. 이것은 시간이 걸리고 때로는 실패하기도 합니다. 따라서 이 비트를 건너뛰고 작업을 더 빠르게 하려면 명령줄 스위치UseBasicParsing를 추가하기만 하면 됩니다.

$r = Invoke-WebRequest https://n3wjack.net -UseBasicParsing

2. HTML을 줄로 분할



PS에서 텍스트를 구문 분석하는 것은 쉽지만 결과가 단일 문자열의 전체 HTML 대신 여러 줄이 있는 텍스트 파일 형식이라면 훨씬 쉽습니다. 웹페이지에서 Content 속성을 가져오면 개행 문자를 분할하여 별도의 줄로 분할할 수 있습니다.
(Invoke-WebRequest https://n3wjack.net -UseBasicParsing).Content -split "`n"

또는 HTTP 헤더 정보도 결과에 포함하려면 RawContent를 대신 사용하십시오.

(Invoke-WebRequest https://n3wjack.net -UseBasicParsing).RawContent -split "`n"

이것은 올바른 응답 헤더가 설정되었는지 자동으로 확인하려는 경우에 매우 편리할 수 있습니다.
그러나 결과 개체에 Headers 컬렉션을 사용할 수도 있습니다. 이는 훨씬 더 쉽습니다.

3. 다운로드 진행률 측정기 쉬즐을 비활성화하여 대용량 파일 다운로드(또는 항상 속도 향상)



다운로드 진행률 표시줄은 Invoke-WebRequest를 사용하여 일부 대용량 바이너리를 다운로드하고 진행 상황을 확인하고 싶을 때 보기 좋은 시각적 도구입니다. 하지만 속도도 상당히 느려집니다. $progressPreference 변수를 설정하면 스크립트가 해당 파일을 훨씬 빠르게 다운로드하는 것을 볼 수 있습니다.
파일(예: 큰 로그 파일, 이미지, 비디오 등)이 클수록 이것이 중요하다는 사실을 깨달았습니다.

$progressPreference = 'silentlyContinue'
invoke-webrequest $logurl -outfile .\logfile.log -UseBasicParsing
$progressPreference = 'Continue'

이 설정은 진행률 표시줄 기능을 사용하는 모든 cmdlet에 영향을 미치므로 나중에 이 설정을 다시 설정해야 합니다.

4. 리디렉션하지 마십시오.


Invoke-WebRequest는 자동으로 HTTP 리디렉션(301/302)을 따르므로 대부분의 경우 찾고 있던 페이지로 끝납니다.
URL이 제대로 리디렉션되었는지(또는 리디렉션되지 않았는지) 테스트하려는 경우 작업이 더 어려워집니다. 이 경우 MaximumRedirection 매개변수를 사용하고 0으로 설정하여 리디렉션을 끌 수 있습니다.

이 작업을 수행할 때 301을 반환하는 URL을 받으면 명령은 최대 리디렉션 횟수를 초과했다는 예외를 throw합니다. 이렇게 하면 이 케이스를 더 쉽게 테스트할 수 있습니다.
결과 개체에는 리디렉션StatusCode도 포함됩니다.

$r = Invoke-WebRequest http://n3wjack.net -MaximumRedirection 0

5. PowerShell 결과 개체 사용



어떤 경우에는 과도하지만 다른 경우에는 이것이 순수한 승리입니다. 결과 개체에는 웹 페이지의 정말 편리한 부분이 포함되어 있어 많은 까다로운 텍스트와 정규식 구문 분석을 쓸모 없게 만듭니다.Image 컬렉션을 사용하여 페이지에서 링크된 모든 이미지를 구문 분석하는 것은 케이크 조각입니다. 페이지의 모든 나가는 링크를 구문 분석하고 싶으십니까? Links 컬렉션을 사용합니다. 양식 구문 분석 등을 위한 StatusCode , Headers 컬렉션, FormsInputfield 컬렉션도 있습니다.
Get-Members를 사용하여 사용할 수 있는 항목을 확인하십시오.
Invoke-WebRequest https://n3wjack.net | get-members

4. 다른 모든 방법이 실패하면 wget.exe를 사용합니다.



네. 때로는 Invoke-WebRequest 단순히 자르지 않습니다. 나는 그것을 구문 분석하려고 시도하고 비참하게 실패하는 일부 복잡한 페이지에 매달려 있는 것을 보았습니다.
이 경우 GNU WGet 도구를 사용하여 페이지를 가져오고 페이지를 텍스트 파일로 다운로드한 다음 구문 분석할 수 있습니다.
exe 확장 부분을 추가하여 wget을 호출해야 합니다. 그렇지 않으면 Invoke-WebRequest에 대한 PowerShell 별칭을 다시 트리거하게 됩니다.
# Install WGet with Chocolatey
choco install wget

# Get the page and save it as a text file
wget.exe https://n3wjack.net -O nj.html
# Read the file and parse it.
get-content nj.html | % { # parsing code goes here }

이것이 PowerShell에서 웹 요청 구문 분석을 쉽게 만드는 데 필요한 모든 팁입니다. 여기에 나열되지 않은 좋은 팁을 알고 있다면 아래에 댓글을 남겨주세요!

좋은 웹페이지 즐겨찾기