Skript-Beispiele für das Herstellen externer HTTP-Verbindungen (Windows-Hosting)
Bitte verwenden sie die "Drucken" Funktion am Seitenende, um ein PDF zu erstellen.
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();
}
}
}