sourcecode

Invoke-WebRequest

copyscript 2023. 8. 17. 21:46
반응형

Invoke-WebRequest

Powershell이 전화해야 할 긴 웹 페이지가 있습니다.태스크 관리자에서 매일 밤 다음과 같이 실행합니다.

powershell -Command "Invoke-WebRequest https://www.example.com/longrunningtask" 

웹 사이트가 응답하기 전에 파워셸 시간 초과가 발생합니다.시간 초과를 설정할 수 있는 방법이 있습니까?Invoke-WebRequest표준 60초보다 길다고요?

있어야 합니다.-TimeoutSec호출할 때 정수 값을 입력할 수 있는 매개 변수Invoke-WebRequestcmdlet.

Invoke-WebRequest https://www.example.com/longrunningtask -TimeoutSec 60

정적 속성을 설정하여 시간 초과 문제를 해결할 수 있습니다.기본값은 100000ms(100초)입니다.

# Bump it up to 180 seconds (3 minutes)
[System.Net.ServicePointManager]::MaxServicePointIdleTime = 180000

# Now run your Invoke-WebRequest after making the change

변경 내용ServicePointManager현재 앱 도메인에만 적용되며 세션 이후에는 유지되지 않습니다.스크립트를 실행할 때마다 이 작업을 수행해야 합니다.)

다음은 파워셸에 대해 성공적으로 시도한 명령으로 앰퍼샌드를 포함한 웹 요청을 수행합니다.

powershell - 명령 "Invoke-WebRequest ""invoke://localhost/index.dll?option=val1""&"view=val2"&"key=val3"&"profile=2" -TimeoutSec 600

추가된 이중 따옴표에 유의하십시오. 명령줄에서 웹 요청을 실행해야 하는 사람에게 도움이 되기를 바랍니다.

이 방법을 사용하면 기본적으로 전체 통화가 수행되는 시간 제한을 설정하기 때문에 필요한 것이 아니라는 것을 알고 있습니다.

  1. 고객의 물건을 만듭니다.
  2. DNS의 주소를 확인
  3. 보안 연결을 사용하는 경우 최종적으로 핸드셰이크를 수행합니다.
  4. 요청서를 발송합니다.
  5. 응답을 기다립니다.
  6. 응답이 포함된 모든 개체 작성

그러나 대부분의 일반적인 경우 대부분의 시간이 포인트 4와 5에 사용된다는 점을 고려하여 대략적인 타임아웃을 설정하기만 하면 됩니다.Start-Job+Wait-Job -Timeout+Receive-Job당신은 일을 끝내야 합니다.

$job = Start-Job -ScriptBolck { Invoke-WebRequest "https://www.example.com/longrunningtask"}
# Wait for the termination of the job, or 60s, whichever occurs first
Wait-Job -Timeout 60
$response = Receive-Job $job

언급URL : https://stackoverflow.com/questions/34136088/invoke-webrequest-set-time-out

반응형