webForumDet fria alternativet

Varför funkar inte.

11 svar · 454 visningar · startad av cgi

cgiMedlem sedan jan. 2000358 inlägg
#1

Varför funkar inte denna kod: x(

print "Content-Type: text/html\n\n";

    open (SIDA, "\<http://www.prodesign.nu/index.jsp?sida=start");
    while ($rad = \<SIDA\> ) {print $rad;}
    close SIDA;
MuzzafarathMedlem sedan apr. 20001 474 inlägg
#2

Tror faktiskt att open bara funkar på lokala sidor. Annars får du använda nån modul (eller skriva en själv) för att hämta hem index.jsp sidan till din server, och sedan öppna den.

sgtpepperMedlem sedan apr. 20005 524 inlägg
#3

Du måste öppna en socket-förbindelse till sajten och skicka HTTP-kommandon för att hämta sidan.

Den här metoden hittade jag på min hårddisk, vet tyvvärr inte vem som är upphovsman:

sub slurpURLcontent {

    # local variables
    local $hostname;
    local $name;
    local $aliases;
    local $proto,
    local $type;
    local $len;
    local $thisaddr;
    local $thataddr;
    local $sockaddr;
    local $this;
    local $that;
    local @response;
    
    # get parameters from parameter list
    local ($them, $port, $url) = @_; 
    
    # get local hostname
    
    chop($hostname = `hostname`);
    
    # resolve protocol, port number
    
    ($name, $aliases, $proto) = getprotobyname('tcp');
    ($name, $aliases, $port) = getservbyname($port,'tcp')
	unless $port =~ /^\d+$/;
     
    # look up IP address for localhost
    
    ($name,$aliases,$type,$len,$thisaddr) = gethostbyname($hostname);
    
    # look up IP address for server
    
    ($name, $aliases,$type,$len,$thataddr) = gethostbyname($them);
    
    # create one endpoint of the communication link
    
    die $! unless (socket(S,AF_INET, SOCK_STREAM, $proto));
    
    $sockaddr = 'S n a4 x8';
    $this = pack($sockaddr, AF_INET, 0, $thisaddr);
    $that = pack($sockaddr, AF_INET, $port, $thataddr);
    
    die $! unless (bind(S, $this));
    
    # connect to server
    
    die $! unless (connect(S, $that));
    
    # force our socket to flush output immediately after a print
    
    select(S);
    $| = 1;
    
    # make standard output the default again
    
    select(STDOUT);
    
    # get specified page

    print S "GET $url\r\n";
    @response = <S>;

# We strip off the HTTP header by looking for 
# two newlines or two newlines preceeded with
# carriage returns.  Different Web Servers use
# different delimiters sometimes.
#
    $x = index(@response, "\r\n\r\n");
    $split_length = 4;

    if ($x == -1) {
        $x = index(@response, "\n\n");
        $split_length = 2;
    }
#
# The following actually splits the header off
    if ($x > -1) {
        @response = substr($buf,$x + $split_length);
    }

    return @response;

}

------------------
° 4711 - the number of the geek °

cgiMedlem sedan jan. 2000358 inlägg
#4

Provade med denna kod:

$fil_1 = "http://www.prodesign.nu/index.jsp?sida=start";
print "Content-type:text/html\n\n";
open(INDATA,"$fil_1") | | &Fatal;
@rader = <INDATA>;
foreach $rad (@rader) {
print $rad;
}
close(INDATA);

sub Fatal {
print "Kan inte öppna filen $fil_1 för läsning."
}

vilket borde funka felfritt tycker man,
får upp felmeddelande kan inte öppna filen, någon som har någon bättre lösning.

[Redigerat av cgi den 20 aug 2000]

MuzzafarathMedlem sedan apr. 20001 474 inlägg
#5

Men du, det är ju precis samma sak som förut... Så klart att den inte funkar: du kan bara öppna _lokala_ filer med open!

cgiMedlem sedan jan. 2000358 inlägg
#6

Ahh...ok du har ingen lösning på problemet.

emissionMedlem sedan dec. 19996 095 inlägg
#7
use LWP::Simple;

$url="http://www.prodesign.nu/index.jsp?sida=start";
$sidan=get($url) or die "Kan inte öppna url:en $url för läsning";

print $sidan;

------------------
Gunnar Liljas - webbutvecklare
Leon Reklambyrå AB

cgiMedlem sedan jan. 2000358 inlägg
#8

Funkar kanon, men det går ej att öppna cgi filer, går det på något sätt.

demo
#9

Det går nog inte att öppna cgi & pl filer då utomstående saknar de rättigheterna.

De filer du inte kan öppna i webbläsaren, kan du nog inte hämta med denna modul heller.

//Demo

emissionMedlem sedan dec. 19996 095 inlägg
#10

Vad menar du med att det inte går att öppna cgi-filer?

cgiMedlem sedan jan. 2000358 inlägg
#11

Strunt samma det är fixat nu. :h

demo
#12

Vad menar du med att det inte går att öppna cgi-filer?

Vet inte om jag förstod rätt, men jag tror att cgi vill hämta själva cgi/pl-scriptet. Komma åt själva perlkoden liksom.

Det var utifrån det som mitt svar var baserat.

Genererad på 510 ms · cache AV · v20260730165559-full.f96bc7eb