PowerShell Proxy Ayarları: Invoke-WebRequest ile Proxy

Yayın tarihi:

13 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Mavi imleçli Invoke-WebRequest -Proxy satırı, proxy üzerinden geçen istek izi, StatusCode : 200 çıktısı ve çıkış IP rozeti

Bilgisayarınızda sorunsuz çalışan bir betik sunucuya taşındı ya da artık bir fiyat listesini başka bir ülkeden bakan ziyaretçi gibi okuması gerekiyor; her Invoke-WebRequest çağrısı bir proxy üzerinden çıkmak zorunda. PowerShell'in bunun için parametreleri var. Yalnız bu parametreler Windows PowerShell 5.1 ile PowerShell 7'de farklı davranır ve en yaygın kestirme, user:pass@ bölümünü proxy adresinin içine yazmak, 5.1'de nedenini söylemeden 407 ile sonuçlanır.

Bu yazıda -Proxy ve -ProxyCredential parametrelerini, istem açmadan kimlik bilgisi oluşturmayı, proxy'yi her çağrı için bir kez tanımlamayı, ortam değişkenlerini ve Windows sistem proxy'sini, SOCKS5'i, yeniden deneme yapan bir indirme betiğini ve hata mesajlarının birebir metnini ele alıyoruz. 5.1 ile ilgili her kod parçasını Windows PowerShell 5.1 (derleme 26100) üzerinde, kullanıcı adı ve parola isteyen yerel bir proxy'ye karşı çalıştırdık. PowerShell 7 test makinesinde kurulu olmadığı için onun davranışı Microsoft belgelerinden alındı ve öyle işaretlendi.

Windows PowerShell 5.1 mi, PowerShell 7 mi: fark neden önemli?

İki sürüm web isteklerini farklı HTTP katmanlarıyla gönderir; bu yüzden aynı proxy ayarı birinde çalışırken öbüründe yok sayılabilir. Windows PowerShell 5.1 Windows ile birlikte gelir ve .NET Framework'ün HttpWebRequest sınıfını kullanır; PowerShell 7 ayrıca indirilir ve HttpClient kullanır. Bir betiğin hangisinde çalıştığını $PSVersionTable.PSVersion söyler.

DavranışWindows PowerShell 5.1PowerShell 7.x
-Proxy, -ProxyCredentialVarVar
HTTP_PROXY, HTTPS_PROXY, NO_PROXYYok sayılır7.0'dan beri okunur
Proxy verilmediğindeKullanıcının Internet SeçenekleriÖnce değişkenler, sonra kullanıcı ayarı
-NoProxy anahtarıYok6.0'dan beri
SOCKS5 adresiYok7.2 ve sonrası
curl ve wget takma adlarıInvoke-WebRequest'i gösterirKaldırıldı
Yerleşik yeniden denemeYok-MaximumRetryCount

5.1 sütunu bizim gözlemlerimizdir; 7.x sütunu PowerShell 7.5 için Invoke-WebRequest başvurusuna dayanır.

Invoke-WebRequest isteği proxy üzerinden nasıl gönderir?

  1. PowerShell hedefin değil, proxy'nin host adını çözer ve proxy portuna bir TCP bağlantısı açar.
  2. http:// hedefte URL'nin tamamını proxy'ye gönderir (GET http://httpbin.org/ip HTTP/1.1). Sayfayı proxy getirir ve size iletir; isteği okuyabilir.
  3. https:// hedefte CONNECT httpbin.org:443 gönderir. Proxy 200 Connection Established ile cevap verdikten sonra siteyle TLS el sıkışması bu tünelin içinde yapılır; proxy yalnız host adını ve portu görür.
  4. Kimlik bilgisi ancak meydan okumadan sonra gider. İlk deneme Proxy-Authorization başlığı taşımaz, proxy Proxy-Authenticate: Basic ile 407 döner, .NET isteği başlıkla yineler. 407 durum kodu ve meydan okuma RFC 9110'da tanımlıdır; 5.1 ön kimlik doğrulama yapmadığı için test proxy'miz her başarılı çağrıyı şu ikili olarak kaydetti:
text
11:02:56 407 GET http://httpbin.org/ip (no Proxy-Authorization)
11:02:56 GET http://httpbin.org/ip user=user
  1. Hedef, proxy'nin çıkış IP'sine cevap verir. Komut StatusCode, Headers ve Content özellikleri olan bir nesne döndürür; 5.1'de 2xx dışındaki bir durum kodu nesne yerine sonlandırıcı hata olur.

Invoke-WebRequest ile proxy nasıl kullanılır?

Önce bir kimlik bilgisi nesnesi oluşturun, sonra proxy adresini ve nesneyi komuta verin:

powershell
$pass = ConvertTo-SecureString "pass" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("user", $pass)

$r = Invoke-WebRequest -UseBasicParsing -Uri "https://httpbin.org/ip" `
    -Proxy "http://pr.proxynet.io:8000" -ProxyCredential $cred
$r | Select-Object StatusCode, StatusDescription | Format-List
$r.Content
text
StatusCode        : 200
StatusDescription : OK

{
  "origin": "203.0.113.42"
}

httpbin.org/ip isteğin geldiği adresi döndürür; proxy çalışıyorsa orada sizin değil proxy'nin çıkış IP'si görünür. -Proxy değeri bir URI'dir ve hedef HTTPS olsa bile http:// şemasıyla yazılır: şema proxy ile kurulan bağlantıyı anlatır, sayfanın kendisi CONNECT tünelinin içinde şifreli kalır. İki parametre de Windows PowerShell 5.1 için Invoke-WebRequest sayfasında belgelenmiştir; sayfanın Türkçe sürümü aynı adreste tr-tr ile açılır.

5.1'de -UseBasicParsing anahtarını her zaman ekleyin. Anahtar olmadan komut HTML'i Internet Explorer motoruyla ayrıştırır ve Microsoft'un Aralık 2025'teki CVE-2025-54100 güvenlik güncelleştirmesinden beri önce onay ister; zamanlanmış bir betikte bu soruyu cevaplayacak kimse yoktur. Bizim çalıştırmamızda anahtarsız çağrı Nesne başvurusu bir nesnenin örneğine ayarlanmadı. hatasıyla düştü. PowerShell 7 yalnız temel ayrıştırma yapar ve anahtarı yok sayar.

Invoke-RestMethod aynı proxy parametrelerini alır; yanıt nesnesi yerine ayrıştırılmış JSON döndürür:

powershell
$ip = Invoke-RestMethod -Uri "https://api.ipify.org?format=json" `
    -Proxy "http://pr.proxynet.io:8000" -ProxyCredential $cred
$ip.ip

Proxynet'in residential ve mobil ürünlerinde ülke, şehir ve oturum bilgisini panelin Endpoint Oluşturucu'sunda seçtiğiniz kullanıcı adı taşır; hangi çıkışı seçerseniz seçin komut aynı kalır.

Proxy kimlik bilgileri nasıl verilir?

Proxy parolası adresin içinde değil, bir PSCredential nesnesinde taşınır. Get-Credential bunu etkileşimli bir istemle sorar; betikte ise yukarıdaki gibi güvenli dizeden oluşturulur. Microsoft'un ConvertTo-SecureString sayfası komut satırına yazılan düz metin parolanın olay günlüklerine ve komut geçmişine düştüğü konusunda uyarıyor; parolayı betiğe yazmak yerine bir ortam değişkeninden ya da gizli anahtar deposundan okuyun:

powershell
$pass = ConvertTo-SecureString $env:PROXY_PASS -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($env:PROXY_USER, $pass)

Testlerimizden üç ayrıntı:

  • -Proxy içindeki user:pass@ 5.1'de yok sayılır. -ProxyCredential olmadan -Proxy "http://user:pass@pr.proxynet.io:8000" yazmak (407) Proxy Kimlik Doğrulaması Gerekli ile bitti; proxy günlüğüne hiç kimlik bilgisi ulaşmadı.
  • Özel karakterler kodlama gerektirmez. p@ss:w#rd biçimindeki bir parola PSCredential üzerinden olduğu gibi geçti; URL biçiminde %40, %3A ve %23 gerekirdi.
  • Web oturumu proxy'yi hatırlar. -Proxy ... -SessionVariable s ile yapılan ilk çağrıdan sonra yalnız -WebSession $s ile yapılan ikinci çağrı yine proxy'den geçti; oturum nesnesi proxy'yi çerezlerin yanında saklar.

-ProxyUseDefaultCredentials ise PSCredential yerine oturum açmış Windows kullanıcısının hesabını gönderir; etki alanına göre kimlik doğrulayan şirket proxy'leri içindir ve belgeye göre -ProxyCredential ile birlikte kullanılamaz. Bu parametreyi test edemedik; proxy'miz yalnız Basic konuşuyor.

Makinenin IP adresini proxy panelinde yetkilendirdiğinizde parola tamamen ortadan kalkar: -Proxy "http://pr.proxynet.io:8000" ayarın tamamı olur. Proxynet en fazla 10 IP'lik bir whitelist kabul eder; sabit adresli bir sunucuda çalışan zamanlanmış işler için uygun yoldur.

Proxy her komut için nasıl tanımlanır?

$PSDefaultParameterValues, Komut:Parametre anahtarlarından oluşan bir hash tablosudur; parametreyi siz vermediğinizde PowerShell buradaki değeri uygular. Komut başına iki girdi yeter:

powershell
$PSDefaultParameterValues["Invoke-WebRequest:Proxy"] = "http://pr.proxynet.io:8000"
$PSDefaultParameterValues["Invoke-WebRequest:ProxyCredential"] = $cred
$PSDefaultParameterValues["Invoke-RestMethod:Proxy"] = "http://pr.proxynet.io:8000"
$PSDefaultParameterValues["Invoke-RestMethod:ProxyCredential"] = $cred

Invoke-RestMethod -Uri "https://api.ipify.org?format=json"   # proxy uzerinden gider

Anahtarlar joker karakter kabul eder; "Invoke-*:Proxy" iki komutu tek satırda kapsar ve iki biçim de testimizde çalıştı. Tablo her yeni oturumda boştur; satırları $PROFILE dosyasına koymadıkça kalıcı olmaz. Başka bir hesapla çalışan betik sizin profilinizi hiç görmez, bu yüzden başkasına vereceğiniz betikte parametreleri açıkça yazın.

Tek bir çağrıyı doğrudan göndermek için -Proxy $null yazmak, tabloda bir ProxyCredential varsayılanı durduğu sürece The cmdlet cannot run because the following parameter is missing: Proxy hatası verir. Onun yerine tabloyu bir anlığına kapatın: $PSDefaultParameterValues["Disabled"] = $true yazın, çağrıyı yapın, değeri $false yapın. Testimizde Disabled açıkken yapılan çağrı doğrudan gitti, bir sonraki yine proxy'den geçti.

PowerShell HTTP_PROXY ve HTTPS_PROXY değişkenlerini okur mu?

Windows PowerShell 5.1 okumaz. $env:HTTP_PROXY ve $env:HTTPS_PROXY tanımlıyken -Proxy vermeden yaptığımız istek doğrudan hedefe gitti; proxy isteği hiç görmedi. Aynı makinede curl.exe, git ve pip bu değişkenlere uyar; karışıklık buradan doğar.

PowerShell 7 ise belgesine göre okur: 7.0'dan beri komutlar varsayılan proxy'yi .NET'in HttpClient.DefaultProxy özelliğinden alır; bu özellik Windows'ta önce HTTP_PROXY, HTTPS_PROXY, ALL_PROXY ve istisna listesi NO_PROXY değişkenlerine bakar, değişkenler boşsa kullanıcının proxy ayarına döner.

powershell
# Yalniz PowerShell 7; 5.1 bunlari yok sayar
$env:HTTPS_PROXY = "http://pr.proxynet.io:8000"
$env:NO_PROXY = "localhost,127.0.0.1,.sirketici.example"
Invoke-WebRequest -Uri "https://httpbin.org/ip"            # proxy uzerinden
Invoke-WebRequest -Uri "https://httpbin.org/ip" -NoProxy   # yalniz bu cagri dogrudan

Kimlik bilgileri yine -ProxyCredential ile verilir; çağrı başına ya da $PSDefaultParameterValues üzerinden, 5.1'deki gibi.

Windows sistem proxy'si ve netsh winhttp ne olur?

-Proxy verilmediğinde 5.1 oturum açmış kullanıcının Internet Seçenekleri'ndeki proxy'ye döner; bu, Windows'un Ayarlar, Ağ ve İnternet, Proxy bölümünde gösterdiği ayardır. .NET Framework belgesi WebRequest.DefaultWebProxy özelliğinin önce uygulama yapılandırma dosyasını, o yoksa kullanıcının Internet Seçenekleri proxy'sini okuduğunu söyler. Birden beklenmedik bir proxy'den çıkan betik genellikle bu ayarı izliyordur; ayarın yerini Windows ve Chrome proxy ayarları yazısında gösteriyoruz.

Windows, servislerin ve sistem bileşenlerinin kullandığı HTTP kütüphanesi WinHTTP için ikinci ve ayrı bir proxy kaydı tutar. Bu kayıt netsh winhttp ile yönetilir ve .NET kullanan PowerShell komutlarını etkilemez. Aşağıdaki komutlar Microsoft'un netsh başvurusundan alındı; makine genelinde bir ayarı değiştirdikleri için burada çalıştırılmadı:

text
netsh winhttp show proxy
netsh winhttp set proxy proxy-server="pr.proxynet.io:8000" bypass-list="*.sirketici.example"
netsh winhttp import proxy source=ie
netsh winhttp reset proxy

set proxy yalnız bir sunucu ve noktalı virgülle ayrılmış bir istisna listesi alır; kullanıcı adı ve parola isteyen bir proxy'yi betik içinde -ProxyCredential ile tanımlamak ya da IP whitelist ile parolasız hâle getirmek daha sağlıklıdır.

Betikte .NET sınıflarıyla proxy nasıl kullanılır?

System.Net.WebClient ya da HttpWebRequest sınıflarını doğrudan çağıran betikler -Proxy parametresini görmez; süreç genelindeki WebRequest.DefaultWebProxy değerini okurlar. Bu değeri bir kez ayarladığınızda o sınıflar ve 5.1'de kendi -Proxy değeri olmayan her Invoke-WebRequest çağrısı proxy'den geçer:

powershell
$proxy = New-Object System.Net.WebProxy("http://pr.proxynet.io:8000")
$proxy.Credentials = New-Object System.Net.NetworkCredential("user", "pass")
$proxy.BypassList = @("^http://intranet\.example\.")
[System.Net.WebRequest]::DefaultWebProxy = $proxy

(New-Object System.Net.WebClient).DownloadString("https://api.ipify.org")

Ayar yalnız o PowerShell sürecinde yaşar. BypassList tam URL ile eşleştirilen düzenli ifadeler tutar; testimizde intranet deseni proxy dışında kaldı, genel adres ise proxy'den geçti.

WebProxy sınıfının bir kuralı bize bir saat kaybettirdi: localhost ya da 127.0.0.1 adresine giden istekler hiçbir zaman proxy kullanmaz. BypassProxyOnLocal değeri False iken bile IsBypassed ikisi için de True döndü; yerel bir web sunucusuna karşı yaptığımız her deneme doğrudan gitti ve proxy çalışıyormuş gibi göründü. Testi genel bir adrese karşı yapın ya da yerel sunucuya içinde nokta bulunan bir host adı verin.

Invoke-WebRequest SOCKS5 destekler mi?

Windows PowerShell 5.1'de desteklemez. -Proxy "socks5://pr.proxynet.io:1080" yazmak ServicePointManager, socks5 düzeninde proxy'leri desteklemiyor. hatasıyla durur; https:// şemalı proxy adresi de aynı hatayı verir, yani 5.1 proxy ile yalnız düz HTTP konuşur.

PowerShell 7.2 ve sonrası .NET 6 ya da daha yeni sürüm üzerinde çalışır; Microsoft'un .NET 6 ağ iyileştirmeleri duyurusu HttpClient için socks5:// adresiyle SOCKS4, SOCKS4a ve SOCKS5 desteğini belgeler. Komutun kendi başvuru sayfası SOCKS'tan söz etmez ve biz 7'yi burada çalıştıramadık; -Proxy "socks5://pr.proxynet.io:1080" yazımını kendi sürümünüzde doğrulamanız gereken bir seçenek olarak alın.

5.1'de pratik yol Windows 10 ve 11 ile gelen gerçek cURL'dür: curl.exe -x "socks5h://user:pass@pr.proxynet.io:1080" https://httpbin.org/ip; socks5h host adını proxy'nin çözmesini sağlar. Seçenekleri cURL ile proxy kullanımı yazısında anlattık; 1080 yerine endpoint oluşturucunun gösterdiği SOCKS5 portunu yazın.

Örnek: URL listesini proxy üzerinden yeniden denemeyle indirmek

Bu betik bir URL listesini proxy üzerinden indirir, geçici hataları artan bekleme süresiyle yeniden dener, 407'de hemen durur ve her URL için bir satır yazar. Yalnız Windows PowerShell 5.1 yeterlidir:

powershell
# fetch.ps1: listedeki her URL proxy uzerinden, yeniden denemeyle
$ErrorActionPreference = "Stop"
$ProxyUri = "http://pr.proxynet.io:8000"
$ProxyCred = New-Object System.Management.Automation.PSCredential (
    "user", (ConvertTo-SecureString "pass" -AsPlainText -Force))

$urls = @(
    "https://httpbin.org/ip",
    "https://httpbin.org/status/503",
    "https://httpbin.org/status/404",
    "https://httpbin.org/headers"
)
$retryCodes = 408, 429, 500, 502, 503, 504

function Get-WithRetry {
    param([string]$Url, [int]$Attempts = 4)
    for ($i = 1; $i -le $Attempts; $i++) {
        $sw = [System.Diagnostics.Stopwatch]::StartNew()
        try {
            $r = Invoke-WebRequest -UseBasicParsing -Uri $Url -Proxy $ProxyUri -ProxyCredential $ProxyCred -TimeoutSec 30
            return [pscustomobject]@{ Url = $Url; Status = $r.StatusCode; Attempts = $i; Ms = $sw.ElapsedMilliseconds; Bytes = $r.RawContentLength }
        } catch [System.Net.WebException] {
            $code = 0
            if ($_.Exception.Response) { $code = [int]$_.Exception.Response.StatusCode }
            if ($code -eq 407) { throw "Proxy kimlik bilgisini reddetti (407). user:pass ya da IP whitelist'i kontrol edin." }
            if (($code -in $retryCodes -or $code -eq 0) -and $i -lt $Attempts) {
                $wait = [math]::Pow(2, $i - 1)   # 1, 2, 4 saniye
                Write-Warning "$Url -> $code ($($_.Exception.Status)); retry $i in $wait s"
                Start-Sleep -Seconds $wait
                continue
            }
            return [pscustomobject]@{ Url = $Url; Status = $code; Attempts = $i; Ms = $sw.ElapsedMilliseconds; Bytes = 0 }
        }
    }
}

$results = foreach ($u in $urls) { Get-WithRetry -Url $u }
$results | Format-Table -AutoSize

Çalıştırmamızda /status/503 adresi iki kez 503 döndü, 1 ve 2 saniye sonra yeniden denendi ve test sunucusu toparlandığı için üçüncü denemede başarılı oldu; 404 yeniden denenmeden geri geldi:

text
WARNING: https://httpbin.org/status/503 -> 503 (ProtocolError); retry 1 in 1 s
WARNING: https://httpbin.org/status/503 -> 503 (ProtocolError); retry 2 in 2 s

Url                            Status Attempts Ms Bytes
---                            ------ -------- -- -----
https://httpbin.org/ip            200        1 34    55
https://httpbin.org/status/503    200        3 11    65
https://httpbin.org/status/404    404        1  3     0
https://httpbin.org/headers       200        1 10   250

Üç tercih önemlidir. 5.1 başarısız isteğin durum kodunu yalnız $_.Exception.Response.StatusCode içinde verir, çünkü 4xx ya da 5xx cevap döndürülmez, hata olarak fırlatılır. $code değerinin 0 olması hiç cevap gelmediği, örneğin zaman aşımı olduğu anlamına gelir ve o da yeniden denenir. -TimeoutSec 30 tek denemeyi sınırlar; varsayılan 0 sonsuza kadar bekler. PowerShell 7'de -MaximumRetryCount 3 -RetryIntervalSec 2 yerleşiktir; belgesine göre Retry-After taşıyan bir 429 cevabı bu aralığı geçersiz kılar.

Her Invoke-WebRequest proxy'ye kendi bağlantısını açar; rotating gateway bu yüzden her çağrıya farklı bir çıkış IP'si verir. Girişin ardından birkaç sayfa gezen bir akış tersini ister: kullanıcı adındaki sticky oturum Residential Proxy üzerinde aynı IP'yi 1-60 dakika korur, -SessionVariable ise çerezleri sizin tarafınızda tutar.

PowerShell proxy betikleri nerelerde kullanılır?

Zamanlanmış görevler en sık karşılaşılan yerdir: gece çalışan bir iş kendi ürün listenizin fiyatını ve stok durumunu başka bir ülkedeki alıcının gördüğü hâliyle denetler; bir izleme betiği sitenizi birkaç bölgeden ister ve yanlış para birimi ya da dil gördüğünde uyarı verir; şirket proxy'sinin arkasındaki bir derleme sunucusu modülleri onun üzerinden kurar. Tek bir adrese izin veren bir iş ortağı API'sine, çıkışı hiç değişmeyen bir işten ulaşılır; ISP Proxy o işe yeniden başlatmalara dayanan adanmış bir IP verir.

Sık görülen PowerShell proxy hataları ve çözümleri

Mesajlar Türkçe Windows'ta Windows PowerShell 5.1'in bastığı hâliyle; .NET'ten gelen bölüm Türkçe, PowerShell'in kendi mesajları bizim makinede İngilizce çıktı.

  • Uzak sunucu hata döndürdü: (407) Proxy Kimlik Doğrulaması Gerekli. -ProxyCredential verilmemiş, kimlik bilgisi adresin içine yazılmış, parola yanlış ya da IP adresi whitelist'te yok. catch bloğunda $_.Exception.Response.StatusCode.value__ değeri 407 verir; nedenleri HTTP 407 Proxy Authentication Required hatası yazısında topladık.
  • Uzak sunucuya bağlanılamıyor ve Status : ConnectFailure. Proxy portu yanlış, arada bir güvenlik duvarı var ya da proxy kapalı.
  • Proxy adı çözülemedi: 'pr.proxynet.io'. Host adında yazım hatası var ya da DNS yok; mesaj hedefi değil proxy'yi adlandırır.
  • The operation has timed out. -TimeoutSec proxy ile hedefin ihtiyacından kısa; 5 saniyede cevap veren bir sayfaya koyduğumuz 2 saniyelik sınır bu mesajı üretti. Metin Türkçe sistemde de İngilizce basıldı.
  • ServicePointManager, socks5 düzeninde proxy'leri desteklemiyor. 5.1'de socks5:// ya da https:// şemalı proxy adresi; http://, PowerShell 7.2+ ya da curl.exe kullanın.
  • A parameter cannot be found that matches parameter name 'x'. 5.1'de yazılmış bir cURL komutu; curl orada Invoke-WebRequest'in takma adıdır, curl.exe yazın.
  • Nesne başvurusu bir nesnenin örneğine ayarlanmadı. Betikte -UseBasicParsing olmadan yapılan 5.1 çağrısı.
  • The cmdlet cannot run because the following parameter is missing: Proxy. $PSDefaultParameterValues hâlâ bir ProxyCredential tutarken -Proxy $null yazılmış; onun yerine Disabled anahtarını kullanın.
  • Proxy sessizce atlanıyor. Hedef localhost ya da 127.0.0.1, ya da betik 5.1'de HTTPS_PROXY değişkenine güveniyor. api.ipify.org sonucunu -Proxy ile ve -Proxy olmadan karşılaştırın.

Karar rehberi

İhtiyaçÖneri
Tek komutu proxy'den geçirmek-Proxy ve -ProxyCredential
Oturumdaki her komut$PROFILE içinde $PSDefaultParameterValues
Betikte parola olmasınPanelde IP whitelist, yalnız -Proxy
Windows oturumuyla doğrulayan şirket proxy'si-ProxyUseDefaultCredentials
Tek çağrı proxy'siz-NoProxy (7) ya da Disabled anahtarı (5.1)
SOCKS5PowerShell 7.2+ ya da socks5h:// ile curl.exe
WebClient ya da HttpWebRequest kodu[System.Net.WebRequest]::DefaultWebProxy
Giriş akışı boyunca aynı çıkış IP'siKullanıcı adında sticky oturum
Servisler ve Windows Updatenetsh winhttp set proxy

Sıkça sorulan sorular

Invoke-WebRequest için proxy nasıl ayarlanır?

Komuta -Proxy "http://host:port" ekleyin; proxy parola istiyorsa yanına bir PSCredential nesnesiyle -ProxyCredential koyun. Aynı iki parametre Invoke-RestMethod komutunda ve PowerShellGet 2.x belgesine göre Install-Module komutunda da vardır.

Invoke-WebRequest neden 407 Proxy Authentication Required döndürür?

Çünkü proxy'ye kullanılabilir bir kimlik bilgisi ulaşmamıştır. 5.1'de bu, kullanıcı adı ve parola -ProxyCredential yerine adresin içine yazıldığında, parola yanlış olduğunda ya da proxy IP'nizi whitelist'te beklerken makinenin adresi değiştiğinde olur.

Invoke-WebRequest Windows proxy ayarlarını kullanır mı?

Evet, -Proxy vermediğinizde. Windows PowerShell 5.1 oturum açmış kullanıcının Internet Seçenekleri proxy'sini alır; PowerShell 7 önce HTTP_PROXY ve HTTPS_PROXY değişkenlerini okur, sonra kullanıcı ayarına döner. netsh winhttp ile tanımlanan WinHTTP proxy'si ayrı bir kayıttır ve ikisi tarafından da okunmaz.

PowerShell'de tek bir istek için proxy nasıl atlanır?

PowerShell 7'de o çağrıya -NoProxy ekleyin. 5.1'de -Proxy yazmayın; $PSDefaultParameterValues yine ekliyorsa çağrının çevresinde $PSDefaultParameterValues["Disabled"] = $true kullanın. Belirli host'ların tamamı için 7'de NO_PROXY, 5.1'de bir WebProxy nesnesinin BypassList özelliği kullanılır.

Invoke-WebRequest ile SOCKS5 proxy kullanılabilir mi?

Windows PowerShell 5.1'de kullanılamaz; socks5:// şemasını reddeder. PowerShell 7.2 ve sonrası HttpClient içinde SOCKS5 proxy'yi destekleyen .NET 6+ üzerinde çalışır; kendi sürümünüzde doğrulayın. 5.1'de onun yerine socks5h:// ile curl.exe çağırın.

PowerShell'in proxy'yi gerçekten kullandığı nasıl anlaşılır?

https://api.ipify.org adresini bir kez -Proxy olmadan, bir kez -Proxy ile isteyin: iki farklı adres görüyorsanız ve ikincisi proxy'nin ülkesindeyse proxy kullanılıyordur. Aynı adres iki kez çıkıyorsa çağrı doğrudan gitmiştir; en sık nedeni hedefin localhost olması ya da 5.1'in tanımladığınız değişkenleri yok saymasıdır.

Özet

Proxy'yi Invoke-WebRequest ve Invoke-RestMethod komutlarına -Proxy ve -ProxyCredential içindeki bir PSCredential ile verin, adresin içine değil; her çağrı proxy'den geçecekse ikisini $PSDefaultParameterValues ile bir kez tanımlayın. Windows PowerShell 5.1 HTTP_PROXY değişkenini yok sayar, Internet Seçenekleri'ne döner, loopback adreslerini proxy dışında bırakır ve SOCKS5 konuşamaz; PowerShell 7 değişkenleri okur, -NoProxy ve yeniden deneme ekler, 7.2'den itibaren SOCKS5 kabul eder. Her 5.1 betiğinde -UseBasicParsing ve -TimeoutSec bulunsun ve testi genel bir adrese karşı yapın. Tam olarak bu parametrelerle çalışan uç noktalar Proxynet proxy sayfasında.

ChatGPT'ye sorClaude'a sor