C# Ligação Através Do 'Proxy'
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.
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();
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);
}
}
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
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;
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.
WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
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.
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);
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.