Można to łatwo osiągnąć programowo, w kodzie lub deklaratywnie w pliku web.config lub app.config.
Możesz programowo utworzyć serwer proxy w następujący sposób:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("[ultimate destination of your request]");
WebProxy myproxy = new WebProxy("[your proxy address]", [your proxy port number]);
myproxy.BypassProxyOnLocal = false;
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Zasadniczo przypisujesz WebProxy
obiekt do właściwości request
obiektu proxy
. Spowoduje request
to użycie proxy
zdefiniowanego przez Ciebie.
Aby osiągnąć to samo deklaratywnie, możesz wykonać następujące czynności:
<system.net>
<defaultProxy>
<proxy
proxyaddress="http://[your proxy address and port number]"
bypassonlocal="false"
/>
</defaultProxy>
</system.net>
w pliku web.config lub app.config. Spowoduje to ustawienie domyślnego serwera proxy, którego będą używać wszystkie żądania http. W zależności od tego, co dokładnie chcesz osiągnąć, możesz wymagać niektórych dodatkowych atrybutów elementu defaultProxy / proxy lub nie , więc zapoznaj się z ich dokumentacją.
BypassProxyOnLocal
natychmiast ustaw właściwość na True (jeśli jest to wymagane).Jeśli używasz
WebClient
, ma właściwość Proxy, której możesz użyć.Jak wspomnieli inni, istnieje kilka sposobów automatyzacji wykrywania / używania ustawień proxy
Web.Config:
<system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="true" bypassonlocal="true" /> </defaultProxy> </system.net>
Korzystanie z klasy WebProxy zgodnie z opisem w tym artykule .
Możesz również skonfigurować ustawienia proxy bezpośrednio (konfiguracja lub kod), a Twoja aplikacja będzie ich używać.
Web.Config:
<system.net> <defaultProxy> <proxy proxyaddress="http://[proxy address]:[proxy port]" bypassonlocal="false" /> </defaultProxy> </system.net>
Kod:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url"); WebProxy myproxy = new WebProxy("[proxy address]:[proxy port]", false); request.Proxy = myproxy; request.Method = "GET"; HttpWebResponse response = (HttpWebResponse) request.GetResponse();
źródło
Wypróbuj ten kod. Wywołaj to przed wykonaniem jakichkolwiek żądań http. Kod będzie korzystał z serwera proxy z ustawień programu Internet Explorer - jednak używam jednej rzeczy,
proxy.Credentials = ....
ponieważ mój serwer proxy jest serwerem akceleracji internetowej z uwierzytelnianiem NTLM. Daj spokój.static void setProxy() { WebProxy proxy = (WebProxy)WebProxy.GetDefaultProxy(); if(proxy.Address != null) { proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; WebRequest.DefaultWebProxy = new System.Net.WebProxy(proxy.Address, proxy.BypassProxyOnLocal, proxy.BypassList, proxy.Credentials); } }
źródło
WebProxy.GetDefaultProxy
jest przestarzały od Framework 4.5 i ta metoda zwraca null. Lepiej zastanów się przed użyciemCredentialCache.DefaultNetworkCredentials
. Jeśli umieściłeś coś w CredentialCache i Twój serwer proxy wymaga takich poświadczeń, to powinno działać. W przeciwnym razie to nie pomoże.Jeśli chcesz, aby aplikacja korzystała z domyślnego serwera proxy systemu, dodaj to do pliku Application.exe.config (gdzie application.exe to nazwa Twojej aplikacji):
<system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="true" bypassonlocal="true" /> </defaultProxy> </system.net>
Więcej szczegółów można znaleźć w artykule MSDN w witrynie System.Net
źródło
Ta jednolinijka działa dla mnie:
CredentialCache.DefaultNetWorkCredentials
to ustawienia proxy określone w programie Internet Explorer.WebRequest.DefaultWebProxy.Credentials
jest używany do wszystkich połączeń internetowych w aplikacji.źródło
Kod Foole działał dla mnie idealnie, ale w .NET 4.0 nie zapomnij sprawdzić, czy Proxy ma wartość NULL, co oznacza, że serwer proxy nie jest skonfigurowany (poza środowiskiem korporacyjnym)
Oto kod, który rozwiązał mój problem z naszym korporacyjnym serwerem proxy
WebClient web = new WebClient(); if (web.Proxy != null) web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
źródło
Ten kod zadziałał dla mnie:
WebClient wc = new WebClient(); wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
źródło
Automatyczne wykrywanie proxy to proces, dzięki któremu serwer proxy sieci Web jest identyfikowany przez system i używany do wysyłania żądań w imieniu klienta. Ta funkcja jest również znana jako Automatyczne wykrywanie serwera proxy sieci Web (WPAD). Gdy automatyczne wykrywanie proxy jest włączone, system próbuje zlokalizować skrypt konfiguracyjny proxy, który jest odpowiedzialny za zwrócenie zestawu serwerów proxy, których można użyć dla żądania.
http://msdn.microsoft.com/en-us/library/fze2ytx2.aspx
źródło
var getHtmlWeb = new HtmlWeb() { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-2") }; WebProxy myproxy = new WebProxy("127.0.0.1:8888", false); NetworkCredential cred = (NetworkCredential)CredentialCache.DefaultCredentials; var document = getHtmlWeb.Load("URL", "GET", myproxy, cred);
źródło
Posłużę się przykładem, aby dodać do powyższych odpowiedzi.
Napotkałem problemy z serwerem proxy podczas próby zainstalowania pakietów za pośrednictwem Instalatora platformy internetowej
To także używa pliku konfiguracyjnego, którym jest WebPlatformInstaller.exe.config
Wypróbowałem zmiany sugerowane na tym forum IIS, które jest
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <defaultProxy enabled="True" useDefaultCredentials="True"/> </system.net> </configuration>
i
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <defaultProxy> <proxy proxyaddress="http://yourproxy.company.com:80" usesystemdefault="True" autoDetect="False" /> </defaultProxy> </system.net> </configuration>
Żadne z nich nie działało.
To, co zadziałało dla mnie, to -
<system.net> <defaultProxy enabled="true" useDefaultCredentials="false"> <module type="WebPI.Net.AuthenticatedProxy, WebPI.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=79a8d77199cbf3bc" /> </defaultProxy> </system.net>
Aby móc z niego korzystać, moduł musiał zostać zarejestrowany w Instalatorze platformy internetowej.
źródło