PowerShell, 웹 요청 및 프록시
간단한 웹 요청을 할 때 PowerShell 환경에 Internet Explorer의 프록시 설정만 사용하도록 지시할 수 있는 방법이 있습니까?
프록시 설정은 네트워크 정책(또는 스크립트)에 의해 제어되므로 나중에 ps 스크립트를 수정할 필요가 없습니다.
업데이트: 참가자들의 훌륭한 정보입니다.이에 사용할 최종 스크립트 템플릿은 다음과 같습니다.
$proxyAddr = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings').ProxyServer
$proxy = new-object System.Net.WebProxy
$proxy.Address = $proxyAddr
$proxy.useDefaultCredentials = $true
$url = "http://stackoverflow.com"
$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)
$str = [System.Text.Encoding]::ASCII.GetString($webpage)
Write-Host $str
보다 나은 점은 다음과 같습니다. 이는 자동 감지 프록시도 처리합니다.
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)
(편집) 위의 내용 외에도, 이 정의는 제게도 효과가 있는 것 같습니다.
function Get-Webclient {
$wc = New-Object Net.WebClient
$wc.UseDefaultCredentials = $true
$wc.Proxy.Credentials = $wc.Credentials
$wc
}
테스트되지 않음:
$user = $env:username
$webproxy = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings').ProxyServer
$pwd = Read-Host "Password?" -assecurestring
$proxy = new-object System.Net.WebProxy
$proxy.Address = $webproxy
$account = new-object System.Net.NetworkCredential($user,[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd)), "")
$proxy.credentials = $account
$url = "http://stackoverflow.com"
$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)
$string = [System.Text.Encoding]::ASCII.GetString($webpage)
...
이는 원래 질문보다 훨씬 늦었지만 이후 버전의 PowerShell에 대해서는 여전히 적절한 답변입니다.v3부터는 이 문제를 해결할 수 있는 두 가지 항목이 있습니다.
호출 - WebRequest - system.net 을 사용하여 대체합니다.거의 모든 시나리오의 웹 클라이언트
$PSDefaultParameterValues - 매개 변수에 대한 세부 정보를 저장할 수 있습니다.
네트워크 정책(또는 스크립트)에 의해 제어되고 나중에 ps 스크립트를 수정할 필요가 없는 프록시 설정의 원래 문제를 해결하기 위해 그것들을 함께 사용하는 방법?
Invoke-WebRequest에는 -Proxy 및 -ProxyUseDefaultCredentials 매개 변수가 함께 제공됩니다.
이러한 파라미터에 대한 답변은 다음과 같이 $PSDefaultParameterValues에 저장됩니다.$PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy','http://###.###.###.###:80')
$PSDefaultParameterValues.Add('Invoke-WebRequest:ProxyUseDefaultCredentials',$true)
http://################:80'을 $proxyAddr로 대체할 수 있습니다.이것을 저장할 범위를 선택할 수 있습니다.$프로파일에 넣었으므로 다시는 스크립트에서 이 항목을 설정할 필요가 없습니다.
누군가에게 도움이 되길 바랍니다!
$proxy = New-Object System.Net.WebProxy("http://yourProxy:8080")
$proxy.useDefaultCredentials = $true
$wc = new-object system.net.webclient
$wc.proxy = $proxy
$wc.downloadString($url)
이것이 정말 오래된 것이라는 것을 알지만, 올바른 방법이 있어서 아는 사람이 거의 없는 것 같습니다.아래는 당신이 관심을 가지고 사용하는 URI의 프록시가 무엇인지 알아보겠습니다.
$uri = "http://www.google.com"
invoke-webrequest -ProxyUseDefaultCredentials -proxy (new-object System.Net.WebClient).Proxy.GetProxy($uri).AbsoluteUri $uri
자신의 프록시 주소:port로 URL을 업데이트하기만 하면 됩니다.이를 통해 PowerShellGet이 로컬 자격 증명을 사용하여 프록시를 통과할 수 있습니다.자격 증명 요구 사항이 없으면 암호를 입력하라는 메시지가 나타나면 확인을 클릭합니다.저는 그 상자의 이름을 "이 창을 닫으세요"로 바꿨습니다.이 스크립트 때문에 Chocolatey/Nuget과 같은 다른 패키지 관리자를 프록시를 통해 사용할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/571429/powershell-web-requests-and-proxies
'sourcecode' 카테고리의 다른 글
작은 자바스크립트 구현? (0) | 2023.09.15 |
---|---|
각도 2 : NgModule 메타데이터를 찾을 수 없습니다. (0) | 2023.09.15 |
virtualenv에서 PYTHONPATH에 경로를 추가하는 방법 (0) | 2023.09.15 |
tempDir를 생성할 수 없습니다. java.io .tmpdir가 C:로 설정되어 있습니다.\Windows\ (0) | 2023.09.15 |
PDF에서 데이터 추출 후 워크시트에 추가 (0) | 2023.09.15 |