tipos sirve servidor que ps4 para online gratuito direccion configurar cambiar .net proxy filter browser response

.net - sirve - servidor proxy ps4



¿Cómo implementar un servidor proxy personalizado? (2)

Tal vez un proxy de código abierto?

http://www.mentalis.org/soft/projects/proxy/

En última instancia, quiero bloquear las descargas en el control .NET WebBrowser , restringiéndolo de manera efectiva a la visualización de HTML, imágenes, scripts y similares, pero nunca, nunca mostrar un diálogo de "Guardar como" para el usuario.

La solución propuesta en una respuesta a esa pregunta fue conectar un servidor proxy personalizado que verifica las respuestas y filtra todo lo que llevaría a un aviso de descarga. ¿Cómo puedo implementar dicho proxy en mi aplicación .NET? No quiero instalar software o bibliotecas de terceros.

Encontré la clase HttpListener , pero tengo dos problemas con ella:

  1. El oyente requiere un conjunto predefinido de prefijos que lo activen. Sin embargo, preferiría no codificar nombres de host o números de puerto en mi aplicación, y mantenerlo genérico.
  2. Tendría que implementar el código que hace la solicitud real - ¿no hay algo que me haga esto donde simplemente pueda tocar la línea, examinar el contenido de la respuesta y cambiarlos según sea necesario (como un filtro de solicitud en J2EE lo hace por el lado del servidor)?

Actualizar

De acuerdo, creo que necesito aclarar esto: mi aplicación .NET (cliente enriquecido) está siendo utilizada en múltiples proyectos que también tienen aplicaciones basadas en web. La aplicación .NET incluye un formulario reutilizable y genérico con un control WebBrowser. Otros desarrolladores usan esa forma para integrar el acceso a sus aplicaciones web en la aplicación .NET.

Quiero bloquear las descargas, por lo que quiero que mi formulario WebBrowser intercepte todo el tráfico y se asegure de que no conduzca a un cuadro de diálogo "Guardar como". Así...

  • No sé cuáles serán los nombres de los anfitriones
  • El WebBrowser apunta a las URL reales, el usuario hace clic en los enlaces regulares, activa JavaScript ... todo servido por la aplicación web
  • Si WebBrowser apuntó a localhost (como se propuso), tendría que analizar las respuestas y volver a escribir todos los enlaces para que apunten a localhost nuevamente, preservando la URL original. No quiero pasar por esa molestia.

HttpListener debería estar bien, pero es solo envoltorio de http.sys y esta biblioteca solo está disponible en Windows XP y versiones posteriores.

HttpPrefixes

Solo necesita un prefijo http://127.0.0.1:8080/ porque es solo para su control web local. Alternativamente, se admiten comodines como http://*:8080/ pero no hay ninguna razón para usarlo en su caso.

Jens Bannmann escribió:

Las aplicaciones a las que se accede no están en el localhost , pueden estar en cualquier lugar. Es por eso que no quiero codificar nada.

¿Qué quieres decir con aplicaciones? te refieres a sitios web? esto es algo completamente distinto, su servidor proxy especial escuchará HttpListenerRequests en http://127.0.0.1:8080/ , y por lo tanto su webcontrol tiene que usar el servidor proxy http://127.0.0.1:8080/ . Todavía está todo dentro de la máquina local en este punto.

Conversión entre HttpListenerRequest / Response y HttpWebRequest / Response

Convierta cada HttpListenerRequest entrante en HttpWebRequest , solicite una respuesta y obtendrá el objeto HttpWebResponse , HttpWebResponse ya sea que se permita la respuesta para su control WebBrowser y, en caso HttpListnererResponse , escríbalo en el objeto HttpListnererResponse contrario, escriba algo más (estado de error).

Esta es probablemente la forma más fácil de construir su propio servidor proxy en .NET

Jens Bannmann escribió:

Correcto, esta conversión fue lo que quería evitar tener que hacer. ¿O puedo hacerlo en solo unas pocas líneas de código? Al mirar la API, se ve más complicado.

En realidad es bastante fácil porque el protocolo http es trivial. Tiene básicamente tres partes.

  • Línea de solicitud (contiene URL, método http y versión http)
  • Encabezados (esto es lo que hace que la API se vea tan grande e importante, pero en realidad todas esas propiedades y métodos son solo capas delgadas sobre encabezados http sin procesar. Todo lo que necesitas hacer es copiar todos los encabezados directamente de HttpListenerRequest a HttpWebRequest . las clases tienen propiedad de Encabezado genérico para acceso sin formato)
  • Cuerpo del mensaje (simplemente copie su contenido si hay alguno)

La conversión completa se vería así:

HttpListenerRequest listenerRequest; WebRequest webRequest = WebRequest.Create(listenerRequest.Url); webRequest.Method = listenerRequest.HttpMethod; webRequest.Headers.Add(listenerRequest.Headers); byte[] body = new byte[listenerRequest.InputStream.Length]; listenerRequest.InputStream.Read(body, 0, body.Length); webRequest.GetRequestStream().Write(body, 0, body.Length); WebResponse webResponse = webRequest.GetResponse();

Si necesita más ayuda sobre el protocolo http, consulte este artículo de Wikipedia .

También puede consultar este proyecto de código abierto para otra forma de hacerlo. No depende de la clase HttpListener , pero es una solución completa de servidor proxy y debería ser fácil de modificar para sus necesidades.