Für ASP.NET Hosting (Windows Webhosting)

In diesem Artikel wird beschrieben, wie Sie den HTTP-Proxy von IONOS für Ihre ASP.NET-Projekte verwenden.

Warum den IONOS HTTP-Proxy verwenden?

Wenn im ASP.NET Hosting ein Programm oder Skript Daten aus einer Internet-Ressource (z.B. Webseite oder Datei) lesen soll, muss die Verbindung über den HTTP-Proxy-Server von IONOS erfolgen. Erfolgt die Verbindung nicht über den Proxy, wird sie aus Sicherheitsgründen abgewiesen.

Wenn Ihre Anwendung also Daten über externe HTTP-Verbindungen liest, müssen Sie sie so konfigurieren, dass sie den Proxy verwendet. 

Möglichkeiten zur Verwendung des HTTP-Proxys

Sie können den HTTP-Proxy-Server auf zwei Arten mit Ihren Projekten verwenden:

  • Proxy dauerhaft über die web.config konfigurieren
  • Proxy temporär direkt im Skript aktivieren

Beide Methoden werden im Folgenden ausführlich beschrieben.

HTTP-Proxy dauerhaft über web.config aktivieren

Falls Ihre Anwendung die Angabe eines Proxyservers über die web.config unterstützt, können Sie die Konfiguration darüber vornehmen. 

Damit der Proxyserver automatisch für HTTP-Requests vewendet wird, tragen Sie winproxy.server.lan als defaultProxy im Bereich <system.net> ... </system.net> ein.

Beispiel:

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

HTTP-Proxy temporär im Skript aktivieren

Alternativ zur Konfiguration über die web.config kann der Proxy auch temporär für Requests aktiviert werden. 

Die folgenden Codebeispiele für VB.NET und C# zeigen die Aktivierung des HTTP-Proxy mittels der Property WebRequest.Proxy der WebRequest-Klasse (aus dem system.net-Namespace):


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> 

HTTP-Proxy-Funktion testen

Im Folgenden zeigen wir am Beispiel der Google reCAPTCHA API, wie Sie die Funktionalität des HTTP-Proxys testen können. 

Dazu verwenden wir eine einfache ASP.NET-Seite, die mittels C# einen (unvollständigen) HTTP-Request an die Google reCAPTCHA API sendet. Dieser Request entspricht normalerweise der Anfrage, mit der die Antwort eines Nutzers auf eine reCAPTCHA-Herausforderung überprüft wird. Die Antwort des Google-Servers wird anschließend auf der Website angezeigt.

Bitte beachten Sie, dass es sich hierbei nicht um eine vollständige Implementierung von Google reCAPTCHA handelt. Es wird lediglich der für eine reCAPTCHA-Herausforderung erforderliche Request simuliert – ein tatsächliches reCAPTCHA-Element ist dabei nicht eingebunden.

Zur Überprüfung der Funktionalität des HTTP-Proxys:

  • Erstellen Sie auf Ihrem Webspace zwei Dateien mit den Namen default.aspx und default.aspx.cs und kopieren Sie den unten stehenden Code hinein.
  • Rufen Sie die Seite default.aspx über Ihre Domain im Browser auf.
  • Klicken Sie auf Start.

    Es wird nun ein Request gesendet und die Antwort unmittelbar vor dem Eingabefeld der Seite angezeigt.
  • Prüfen Sie, ob links vom Eingabfeld ein Text angezeigt wird. Die Ausgabe sollte in etwa so aussehen:

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

    Es ist nur wichtig, dass dort etwas ist und kein Systemfehler vorliegt. Wenn Sie letzteres nicht korrigieren können, prüfen Sie, ob der Proxy alternativ über web.config aktiviert werden kann.

 

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();
}
}
}