Für IONOS Hosting Windows-Pakete

Soll ein Programm/Skript Daten von einer Internet-Ressource (eine Website oder Datei) lesen, muss die Verbindung über den HTTP-Proxy-Server von IONOS (winproxy.server.lan) erfolgen. Ist das nicht der Fall, wird die Verbindung aus Sicherheitsgründen abgelehnt.

Es gibt zwei Möglichkeiten, den HTTP-Proxy für externe Verbindungen zu verwenden: Deklarativ über die web.config, oder auf Programmebene.

Möglichkeit 1: HTTP-Proxy ü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. Tragen Sie winproxy.server.lan als defaultProxy im Bereich <system.net> ... </system.net> ein, damit er immer automatisch für HTTP-Requests verwendet wird:

<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

Möglichkeit 2: HTTP-Proxy 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, wie man den HTTP-Proxy mittels der Property WebRequest.Proxy der WebRequest-Klasse (aus dem system.net-Namespace) aktiviert:

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> 

Anwendungsbeispiel (ASP.NET)

Im Folgenden finden Sie Code-Beispiele für eine einfache ASP.NET-Webanwendung, mit der Sie die Funktionalität des HTTP-Proxy überprüfen können. Dazu wird ein (unvollständiger) Request an die Google reCAPTCHA-API gesendet, der üblicherweise verwendet wird, um die Antwort eines Benutzers auf eine recAPTCHA-Herausforderung zu überprüfen. Die Antwort des Google-Servers wird dann auf der Website ausgegeben.

Bitte beachten Sie, dass es sich hier nicht um eine vollständige Implementierung von Google reCAPTCHA handelt; es wird lediglich der für eine recAPTCHA Challenge notwendige Request simuliert, ohne dass  ein entsprechendes reCAPTCHA existiert. 

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