Ejemplos de scripts para establecer conexiones HTTP externas (hosting Windows)

Si un programa o script va a leer datos de un recurso online (un sitio web o un archivo), la conexión debe realizarse a través del servidor proxy HTTP de IONOS (winproxy.server.lan). Si no, la conexión se rechazará por razones de seguridad.

Hay dos maneras de usar el proxy HTTP para conexiones externas: de forma declarativa vía web.config o a nivel de programa.

Opción 1: Habilitar el proxy HTTP a través de web.config

Si el proxy siempre se va a utilizar automáticamente para las peticiones HTTP, se requiere una configuración a través del archivo web.config. Para ello se debe indicar el host winproxy.schlund.de como defaultProxy en el área<system.net> ... </system.net>:

<configuration> 
...
<system.net>
    <defaultProxy>
        <proxy  proxyaddress="http://winproxy.server.lan:3128"
                bypassonlocal="true"
        />

    </defaultProxy>
</system.net>
...
</configuration> 

//... steht hier als Platzhalter für bestehende Einträge

Opción 2: Habilitar el proxy HTTP en el script

Como alternativa a la configuración a través de web.config, el proxy también puede activarse temporalmente para las solicitudes.

Los siguientes ejemplos de código para VB.NET y C# muestran cómo activar el proxy HTTP utilizando la property WebRequest.proxy de la clase WebRequest (desde el espacio de nombres system.net):

VB.NET
<% @Import Namespace="System.Net" %>
<% @Import Namespace="System.IO" %>
<script language="VB" runat=server>

Sub Page_Load(sender as object, e as System.EventArgs)
Try
Dim wrq As WebRequest = WebRequest.Create("http://domain.tld") //replace domain.tld as wanted
wrq.Proxy = new WebProxy("http://winproxy.server.lan:3128")
Dim wrp As WebResponse = wrq.GetResponse()

Dim sr as StreamReader = new StreamReader(wrp.GetResponseStream(), Encoding.ASCII)
While sr.Peek() > 0
Response.Write(sr.ReadLine())
End While

Catch ex as WebException
Response.Write(ex.Message)
End Try
End Sub

</script>
C#
<% @Import Namespace="System.Net" %>
<% @Import Namespace="System.IO" %>
<script language="C#" runat=server>

void Page_Load(object sender, System.EventArgs e)
{
try
{
WebRequest wrq = WebRequest.Create("http://domain.tld"); // replace domain.tld as wanted
wrq.Proxy = new WebProxy("http://winproxy.server.lan:3128");
WebResponse wrp = wrq.GetResponse();

StreamReader sr = new StreamReader(wrp.GetResponseStream(), Encoding.ASCII);
while (sr.Peek() > 0)
{
Response.Write(sr.ReadLine());
}
}
catch(WebException ex)
{
Response.Write(ex.Message);
}
}
</script> 

Ejemplo de aplicación (ASP.NET)

Los siguientes son ejemplos de código de una simple aplicación Web ASP.NET que puede utilizar para verificar la funcionalidad del proxy HTTP. Esto se hace enviando una solicitud (incompleta) a la API de Google reCAPTCHA, que se utiliza habitualmente para verificar la respuesta de un usuario a un reCAPTCHA. La respuesta del servidor de Google se mostrará en el sitio web.

Tenga en cuenta que esta no es una implementación completa de Google reCAPTCHA; solo se simula la solicitud necesaria para un recAPTCHA sin que exista la correspondiente reCAPCHTA.

  • Cree dos archivos denominados default.aspx y default.aspx.cs en su espacio web. Copie y pegue el código de abajo en estos archivos.
  • Acceda a la página default.aspx desde su dominio en el navegador.
  • Haga clic en Iniciar. Ahora se envía una solicitud y la respuesta se muestra inmediatamente delante del campo de entrada de la página.
  • Verifique si se visualiza un texto a la izquierda del campo de entrada. La salida debe tener el siguiente aspecto:

    { "success": false, "error-codes": [ "missing-input-response", "missing-input-secret" ] } 

    Es importante que se indique alguna información (no importa el contenido exacto) y que no haya ningún error del sistema. Si no puede corregir el error, compruebe si el proxy puede activarse alternativamente a través de web.config.
default.aspx
<%@ Page Language="C#" AutoEventWireup="true" Codefile="default.aspx.cs" Inherits="WebApplication1._default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="URL:"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" Width="269px" Text="https://www.google.com/recaptcha/api/siteverify"></asp:TextBox> 
<asp:Button ID="Button1" runat="server" Text="Start" OnClick="Button1_Click" /> 
</div>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

</form>
</body>
</html>
default.aspx.cs
using System;
using System.Net;
using System.IO;

namespace WebApplication1

{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
WebrequesProxy();
}

protected void WebrequesProxy()
{
WebRequest wrGETURL;
wrGETURL = WebRequest.Create(TextBox1.Text);
WebProxy myProxy = new WebProxy("http:/winproxy.server.lan:3128/",true);
wrGETURL.Proxy = myProxy;

Stream objStream;
objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);
Label1.Text = objReader.ReadToEnd();
}
}
}