Esempi di script per stabilire connessioni HTTP esterne (Hosting Windows)

Per pacchetti Hosting Windows

Se un programma/script deve leggere dati da una risorsa Internet (un sito web o un file), è necessario effettuare la connessione tramite il server proxy HTTP di IONOS (winproxy.server.lan). In caso contrario, la connessione viene rifiutata per motivi di sicurezza.

Esistono due modi per poter utilizzare il proxy HTTP per le connessioni esterne: tramite web.config oppure a livello di programma.

Opzione 1: attivare proxy HTTP tramite web.config

Se si desidera che il proxy venga sempre utilizzato automaticamente per le richieste HTTP, è necessaria una configurazione tramite il file web.config. Per farlo, l'host winproxy.server.lan deve essere inserito come defaultProxy nella sezione<system.net> ... </system.net>:

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

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

//... è usato qui come metacarattere per le voci esistenti

Opzione 2: attivare il proxy HTTP nello script

In alternativa alla configurazione tramite web.config, il proxy può anche essere attivato temporaneamente per le richieste.

I seguenti esempi di codice per VB.NET e C# mostrano come attivare il proxy HTTP utilizzando la property WebRequest.Proxy della classe WebRequest (dal namespace 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> 

Esempio di applicazione (ASP.NET)

Di seguito puoi trovare esempi di codici per un'applicazione web ASP.NET semplice, che possono essere utilizzati per verificare la funzionalità del proxy HTTP. Per farlo, viene inviata una richiesta (incompleta) all'API reCAPTCHA di Google, che viene comunemente utilizzata per verificare la risposta di un utente ad una richiesta recAPTCHA. La risposta del server di Google verrà quindi visualizzata sul sito web.

Attenzione: in questo caso non si tratta di un'implementazione completa di Google reCAPTCHA; viene simulata solo la richiesta necessaria per una challenge recAPTCHA, senza che esista un reCAPTCHTA corrispondente.

  • Crea due file denominati default.aspx e default.aspx.cs sul tuo spazio web e copia il codice sottostante.
  • Apri la pagina default.aspx dal tuo dominio nel browser.
  • Clicca su Start.
    Viene inviata una richiesta e viene mostrata la risposta immediatamente prima del campo di immissione della pagina.
  • Verifica se viene mostrato un testo a sinistra del campo di immissione. L'output dovrebbe assomigliare al seguente:
    { "success": false, "error-codes": [ "missing-input-response", "missing-input-secret" ] } 

    E' importante che l'output mostri un messaggio e che non ci sia alcun errore di sistema. Se non è possibile correggere quest'ultimo, verifica se il proxy può essere attivato in alternativa tramite 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();
}
}
}