Trabajo en una oficina que requiere que todas las conexiones se realicen a través de un proxy http específico. Necesito escribir una aplicación simple para consultar algunos valores de un servidor web; es fácil si no hubiera un proxy. ¿Cómo puedo hacer que la aplicación C# sea provista por proxy? ¿Cómo puedo hacer cualquier tipo de conexión a través de un proxy?C# Conectando a través de Proxy
Respuesta
Esto se logra fácilmente ya sea programáticamente, en su código o declarativamente en el web.config o el app.config.
Se pueden crear mediante programación un proxy de este modo:
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();
Básicamente, se está asignando el objeto WebProxy
a la propiedad del objeto request
proxy
. Este request
usará entonces el proxy
que defina.
Para lograr lo mismo mediante declaración, puede hacer lo siguiente:
<system.net>
<defaultProxy>
<proxy
proxyaddress="http://[your proxy address and port number]"
bypassonlocal="false"
/>
</defaultProxy>
</system.net>
dentro de su web.config o app.config. Esto establece un proxy predeterminado que usarán todas las solicitudes http. Dependiendo de exactamente lo que necesite lograr, puede o no requerir algunos de los atributos adicionales del elemento defaultProxy/proxy, por lo tanto, consulte la documentación correspondiente.
Si está usando WebClient
, tiene una propiedad Proxy que puede usar.
como han mencionado otros, hay varias maneras de automatizar la configuración de detección/uso
Web.Config Proxy:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" bypassonlocal="true" />
</defaultProxy>
</system.net>
uso de la clase WebProxy como se describe en this article.
También puede cofigurar la configuración del proxy directamente (configuración o código) y su aplicación los usará.
Web.Config:
<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();
Si desea que la aplicación para utilizar el proxy por defecto del sistema, añadir esto a su Application.exe.config (donde aplicación.exe es el nombre de su aplicación):
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" bypassonlocal="true" />
</defaultProxy>
</system.net>
Más detalles se pueden encontrar en MSDN article on System.Net
La detección automática de proxy es un proceso mediante el cual un servidor proxy web se identifica mediante el sistema y se utiliza para enviar solicitudes en nombre del cliente. Esta característica también se conoce como Web Proxy Auto-Discovery (WPAD). Cuando la detección de proxy automático está habilitada, el sistema intenta localizar un script de configuración de proxy responsable de devolver el conjunto de proxies que se pueden usar para la solicitud.
¿Cómo responde esto la pregunta? ¿Cómo puede el OP poner esta información en uso? – Cullub
Este código ha trabajado para mí:
WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
probar este código. Llámalo antes de realizar cualquier solicitud http. El código usará el proxy de su configuración de Internet Explorer. Sin embargo, una cosa es que utilizo proxy.Credentials = ....
porque mi servidor proxy es un servidor de aceleración de Internet autenticado por NTLM. Dale un genio.
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);
}
}
'WebProxy.GetDefaultProxy' es obsoleto desde Framework 4.5 y este método devuelve null. Mejor pensar antes de usar 'CredentialCache.DefaultNetworkCredentials'. Si ha puesto algo en CredentialCache y su proxy requiere tales credenciales, entonces debería funcionar. De lo contrario, no será de ayuda. – cassandrad
código de Foole funcionó a la perfección para mí, pero en .NET 4.0, no se olvide de comprobar si Proxy es NULL, que significa que no hay proxy configurado (fuera de entorno corporativo)
Así que aquí está el código que resuelto mi problema con la representación corporativa
WebClient web = new WebClient();
if (web.Proxy != null)
web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
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);
Es preferible escribir una explicación de su solución y no solo el código postal. ¿Puedes editar en algún texto que pueda ayudar al lector? –
voy a utilizar un ejemplo para añadir a las respuestas anteriores.
me encontré con problemas de proxy al intentar instalar los paquetes a través del Instalador de plataforma web
Eso también utiliza un archivo de configuración que es WebPlatformInstaller.exe.config
probé las ediciones sugieren en this IIS forum que es
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy enabled="True" useDefaultCredentials="True"/>
</system.net>
</configuration>
y
<?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>
Ninguno de estos funcionó.
lo que funcionó para mí fue esto -
<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>
El módulo es necesario estar registrado en la plataforma Web de instalación con el fin de usarlo.
Esta sola línea funciona para mí:
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
CredentialCache.DefaultNetWorkCredentials
es la configuración de proxy establecida en Internet Explorer.
WebRequest.DefaultWebProxy.Credentials
se utiliza para todas las conexiones a Internet de la aplicación.
- 1. Conectando a MySQL a través de Cygwin
- 2. Conectando a Teradata a través de Perl
- 3. Conectando C# a Oracle
- 4. TortoiseSVN a través de un script proxy
- 5. git: // a través del proxy
- 6. Conectar a través de proxy BitBucket
- 7. conectando la instancia de ec2 a través de filezilla
- 8. Conectando a través de valores faltantes con geom_line
- 9. conectando dos clientes con socket.io a través de node.js
- 10. Problemas sobre C# conectando a EC2
- 11. XMLDocument.Load (url) a través de un proxy
- 12. ¿Redirigir localhost a través del proxy?
- 13. "Conectando" SDL_Surface a shared_ptr
- 14. Conectando a Oracle desde F #
- 15. conectando a mysql desde cygwin
- 16. Comunicación con un proxy HTTP a través de .NET TcpClient
- 17. Conectando a MongoDB desde MATLAB
- 18. Error de protocolo desconocido al usar git-svn a través de HTTPS a través de un servidor proxy
- 19. Cómo conectarse a SQL Server a través del servidor proxy
- 20. Conectando a Oracle usando PHP
- 21. Git a través de la autenticación del proxy de resumen
- 22. rails paquete de instalación a través de proxy en Windows
- 23. Uso de PsGet a través de un Proxy
- 24. Conectando a mssql usando pdo a través de php y linux
- 25. Detectar clientes con servidores proxy a través de PHP
- 26. Cómo puedo obtener Hudson para actualizar a través de Proxy
- 27. Conexiones SOAP a través de un proxy utilizando URLEndpoint
- 28. Error al proxy para maven repo a través de Nexus
- 29. ¿Cómo usar CURL a través de un proxy?
- 30. Envío de correo electrónico a través del proxy HTTP
en el ejemplo programático, no configuró el puerto, ¿POR QUÉ? – Skuta
@Skuta: sin motivo en particular. Eso fue simplemente un descuido, como en ese ejemplo, estoy usando el constructor que toma la URL (como una cadena) y un booleano para determinar si las direcciones locales se pasan por alto. Si necesita un número de puerto específico, podría ser mejor utilizar el constructor sobrecargado que permite la URL (como una cadena) y el número de puerto (como un Int32), luego establecer la propiedad 'BypassProxyOnLocal' en True (si es necesario) inmediatamente después. – CraigTP
@Skuta - He editado mi publicación para aclarar esto y para asegurarme de que los ejemplos programáticos y declarativos están realmente haciendo lo mismo. – CraigTP