C# Ligação Através Do 'Proxy'

Eu trabalho num escritório que requer que todas as ligações sejam feitas através de um proxy http específico. Eu preciso escrever uma aplicação simples para consultar alguns valores de um servidor web-é fácil se não houvesse proxy. Como posso tornar o proxy da aplicação C# consciente? Como posso fazer qualquer tipo de ligação através de um proxy?

 79
Author: KalEl, 2009-12-21

10 answers

Isto é facilmente alcançado programaticamente, em seu código, ou declarativamente em qualquer uma das web.configuração ou aplicação.configuracao.

Pode-se programaticamente criar um proxy assim:

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();

Estás basicamente a atribuir o objecto WebProxy à propriedade request do objecto proxy. Este request irá então usar o {[4] } que definir.

Para obter a mesma coisa declarativamente, você pode fazer o seguinte:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[your proxy address and port number]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

Dentro da tua teia.configuração ou aplicação.configuracao. Isto define um um 'proxy' predefinido que todos os pedidos de http irão usar. Dependendo exatamente do que você precisa alcançar, você pode ou não precisar de alguns dos atributos adicionais do defaultProxy / elemento proxy , por isso consulte a documentação para estes.

 90
Author: CraigTP, 2009-12-22 11:18:25

Se estiver a utilizar WebClient, tem uma propriedade Proxy que pode usar.

Como outros já mencionaram, existem várias formas de automatizar a detecção/Utilização da configuração do 'proxy'

Web.Configuração:
<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
     <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

Utilização da classe WebProxy descrita em Este artigo .


Também pode configurar as opções do 'proxy' directamente (configuração ou código) e a sua aplicação irá então usá-las.

Web.Configuração:
<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[proxy address]:[proxy port]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

Código:

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();
 20
Author: Oded, 2009-12-21 09:30:56
Tenta este código. Ligue antes de fazer qualquer pedido http. O código irá usar o proxy da configuração do Internet Explorer - uma coisa no entanto, eu uso proxy.Credentials = .... porque o meu servidor proxy é um servidor de aceleração da Internet autenticado NTLM. Dá-lhe uma mija.
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);
    }
}
 6
Author: Seamus, 2011-05-10 23:23:11

Se quiser que a aplicação use o 'proxy' predefinido do sistema, adicione isto à sua aplicação.exe.configuração(em que Aplicação.exe é o nome da sua aplicação):

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
   <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

Mais detalhes podem ser encontrados no artigo MSDN sobre System.Net

 5
Author: Robert Christie, 2009-12-21 09:09:27

O código do Foole funcionou perfeitamente para mim, mas no. NET 4.0, não se esqueça de verificar se o Proxy é nulo, o que significa que nenhum proxy configurado (fora do ambiente corporativo)

Então aqui está o código que resolveu o meu problema com o nosso proxy corporativo.
WebClient web = new WebClient();
if (web.Proxy != null)
    web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
 4
Author: JCH2k, 2012-11-23 12:52:50

Esta linha funciona para mim:

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

CredentialCache.DefaultNetWorkCredentials é a configuração do proxy definida no Internet Explorer.

WebRequest.DefaultWebProxy.Credentials é utilizado para toda a conectividade à internet na aplicação.

 4
Author: Coert Grobbelaar, 2015-11-14 12:57:15
Este código funcionou comigo.
WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
 3
Author: Foole, 2009-12-21 09:31:17

A detecção automática de 'proxy' é um processo pelo qual um servidor de 'proxy' Web é identificado pela sistema e usado para enviar pedidos em nome do cliente. Esta característica também é conhecida como Auto-descoberta do 'Proxy' Web (WPAD). Quando a detecção automática do 'proxy' estiver activa, o sistema tentativas de localizar um script de configuração de proxy que é responsável por retornar o conjunto de proxies que podem ser usados para o pedido.

Http://msdn.microsoft.com/en-us/library/fze2ytx2.aspx

 0
Author: Elijah Glover, 2009-12-21 09:11:28
            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);
 0
Author: JD-V, 2015-05-16 17:40:33

Vou usar um exemplo para adicionar às respostas acima.

Encontrei problemas com o 'proxy' ao tentar instalar pacotes através do Instalador de plataformas Web

Isso também usa um ficheiro de configuração que é WebPlatformInstaller.exe.configuração

Tentei as edições sugeridas neste fórum IIS que é

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  
  <system.net>    
     <defaultProxy enabled="True" useDefaultCredentials="True"/>      
   </system.net>
</configuration>

E

<?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>

Nada disto funcionou.

O que funcionou para mim foi isto ...
<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>

O módulo precisava de ser registrado com Instalador de plataforma Web para usá-lo.

 0
Author: Mukus, 2015-09-09 23:45:11