Socket + Zugriff auf externe Seite
Florian
- perl
Hallo!
Ich habe schon seit mehreren Tagen folgendes Problem und irgendwie kann mir niemand weiterhelfen. Zuerst muss ich noch sagen, dass ich ziemlicher Anfänger bin, was Perl angeht, aber nun zum Thema. Ich möchte erstmal,um es endlich hinzubekommen, einen einfachen Zugriff auf eine fremde Seite (http://fremdeseite.de/) und diese ausgeben. Später möchte ich somit Platzhalter in dieser ersetzen, aber man soll ja klein anfangen. Bei folgenden Script tritt immer der Fehler Premature end of script headers auf. Die Rechte sind richtig gesetzt und Kontent unterstützt auch Sockets , nur leider kein LWP. Ich hoffe ihr könnt mir helfen.
#!/bin/perl
use Socket;
sub get($)
{
my $url = shift;
my ($host, $uri) = ($url =~ m!http://(.*?)(/.*)!);
my $res;
socket SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp');
connect SOCK, sockaddr_in(80, inet_aton($host));
send SOCK, "GET $uri HTTP/1.0\r\nHost: $host\r\n\r\n", 0;
0 while <SOCK> !~ /^\r\n$/;
$res .= $_ while <SOCK>;
close SOCK;
return $res;
}
print "Content-Type: text/html\n\n";
print get("http://www.perlhelp.de/");
Hi,
Zuerst muss ich noch sagen, dass ich ziemlicher Anfänger bin, was Perl angeht,
dann nehme ich an, dass die Wahl auf Sockets vor allem deswegen fiel, weil Du nichts besseres kennst, richtig? :-) Für HTTP-Requests hat Perl die CPAN[1]-Module LWP::Simple oder LWP::UserAgent vorgesehen; je nach gewünschter Funktionalität. Doku ist (wie immer) dabei, und die Module sollten auch bereits installiert sein.
#!/bin/perl
Beginne lieber mit
#!/bin/perl -w
use strict;
Das meldet Dir auch solche Fehler, die Du sonst nur schwer entdeckst.
print "Content-Type: text/html\n\n";
use CGI ':standard';
print header;
Mehr unter perldoc CGI.
print get("http://www.perlhelp.de/");
Bei LWP::Simple bleibt dieser Aufruf identisch ;-) wobei Du auch getprint() verwenden kannst.
Cheatah
Leider kann ich LWP bei Kontent nicht nutzen. Habe schon eine Abfrage aller installierten Module gemacht und ohne LWP gibt es laut meinem jetzigen Kenntnissen nur die Socket Methode um eine fremde Seite auszugeben.
Florian
Hi,
Leider kann ich LWP bei Kontent nicht nutzen.
Du möchtest den Provider wechseln.
ohne LWP gibt es laut meinem jetzigen Kenntnissen nur die Socket Methode um eine fremde Seite auszugeben.
Sagen wir so: LWP tut nichts anderes. Um das aber nicht immer selbst machen zu müssen, gibt es Module. Das Rad ist bereits erfunden.
Cheatah