Datatyper i perl. Tilgang til miljøvariabler
Vanlige spørsmål om Perl for nybegynnere
Vanlige spørsmål samlet på konferansen RU.CGI.PERL.CHAINIK Hva er CGI? Dette er et vanlig gateway-grensesnitt som kobler sammen et program som kjører en webserver og en klient i form av en HTTP-nettleser. Dette er med andre ord et verktøy som lar deg generere HTML-dokumenter i farten, avhengig av forholdene og ønsker til programmereren. Som ethvert klient-serververktøy består et CGI-program av to deler - en som kjører på klienten, i et nettlesermiljø, og den andre som kjører på serveren, i et webservermiljø. Klientdelen er skrevet i HTML (eventuelt med bruk av ulike tilleggsverktøy som utvider dens muligheter), serverdelen kan skrives i et hvilket som helst programmeringsspråk som er i stand til å lage kjørbare programmer på plattformen som webserveren er installert på. Vi vil bruke Perl til disse formålene fordi det er praktisk for å behandle tekststrenger - og et HTML-dokument er bare tekst. Prinsippet for drift av grensesnittet er veldig enkelt - webserveren, hvis tillatt, kan starte det kjørbare programmet; I motsetning til brukeren som starter det samme programmet, vil vann-, utgangs- og feilstrømmene til det kjørende programmet omdirigeres: input og output til HTTP-protokoll , og feil - til webserverens feilloggfil. På denne måten kan vi lage et HTML-dokument på farten ved ganske enkelt å skrive ut taggene til utdatastrømmen ved å bruke print-kommandoen eller tilsvarende. Det er imidlertid bedre å se én gang enn å høre hundre ganger. For å kunne jobbe med klient-server-programmer, må du først installere klienten og serveren. Enhver nettleser som støtter HTTP-protokollen kan brukes som klient (Netscape anbefales fordi den er ganske streng med å svare på feil; du kan være sikker på at det som fungerer i den vil fungere hvor som helst - og det motsatte er sjelden sant), i Apache webserver anbefales som server. Dette er en av de vanligste webserverne; den kan kompileres på alle tenkelige plattformer og systemer, og programmer som er justert for den kan mest sannsynlig installeres av enhver leverandør. Apache-nettserveren for Windows hentes best fra ftp://cdl.bmstu.ru/soft/cgi. Installer den imidlertid ikke i katalogen den foreslår for installasjon, men i c:\apache . Nettserveren kan fungere selv om den er installert i root som standard, men når du konfigurerer den vil det være noen avvik med alternativet som foreslås her - hvis du vil unngå uønskede komplikasjoner, endre standardbanen. Start webserveren (et tomt svart vindu vil vises på skjermen - dette er et normalt resultat av en vellykket lansering; ikke lukk dette vinduet med makt - nettserveren har laget et spesielt ikon for deg å fullføre). Få tilgang til den fra en nettleser via URLen http://localhost og sørg for at demowebsiden, som ligger i htdocs-katalogen, starter. Hvis webserveren ikke starter, les feilmeldingen den viser. Oftest kan ikke webserveren starte fordi navnet ikke er spesifisert. Åpne konfigurasjonsfilen for hovednettserveren (httpd.conf) for redigering og fjern merknaden fra det overførte servernavnet, og gi serveren et hvilket som helst navn - for eksempel localhost. Nå er det fornuftig å prøve å kjøre ditt første CGI-program. For å kunne skrive CGI-programmer i Perl, må du installere Perl. Du kan få det på samme sted som webserveren; installasjon av dette programmet inneholder ingen spesielle fallgruver. Du vil bli bedt om å kompilere Perl fra C-teksten; hvis du avslår dette (som anbefales), vil den allerede kompilerte binære versjonen bli distribuert. Etter installasjonen, ikke glem å legge banen i Autoexec.bat-filen til c:\perl\bin-katalogen - der perl.exe-filen finnes. Sjekk at Perl er riktig installert ved å skrive et enkelt enlinjeprogram: skriv ut "Hei"; Kjør dette programmet fra hvilken som helst katalog ved å skrive "perl filnavn", der filnavn er navnet på filen der du skrev inn linjen ovenfor. Hvis ordet Hei vises på skjermen, betyr dette at du gjorde alt riktig. I motsetning til mange andre webservere, kaller Apache selve Perl-tolken, så hvert program må spesifisere hvor det er plassert. Dermed bør den første linjen i CGI-skriptet vårt være veien til tolken: #!perl Etter at banen til tolken er spesifisert, må du sette en server http-header som angir typen data som skal sendes: Vær oppmerksom på at http-headers-feltet ender med en dobbel linjemating. Selve overskriftene, hvis det er flere av dem, er atskilt fra hverandre med en enkelt linjemating. Den tredje linjen i programmet vårt vil inneholde nødvendig utstyr for å lage HTML-dokumenter: skrive ut " ";
skrive ut " ";
skrive ut " VLINK=\"#551A8B\">\n";
Vær oppmerksom på at når det brukes inne i en utskriftskommando, må doble anførselstegn krysses ut - ellers vil tolken ta anførselstegnene som slutten av kommandoen, og det som kommer etter dem som en uavsluttet linje, og vil svare med en kjøretidsfeil. Nå må du skrive en utdatalinje og lukke html-dokumentet. skriv ut "Hei";
skrive ut ""; Så hele vårt første program vil se slik ut: #!perl
print "Innholdstype: tekst/html\n\n";
skrive ut " ";
skrive ut " ";
skrive ut " \n";
skriv ut "Hei";
skrive ut "";
Sjekk at det kjører riktig ved å kjøre programmet lokalt. For å gjøre dette, skriv på kommandolinjen: perl filnavn, der filnavn er navnet på programmet. Hvis alt er i orden, skal programmet skrive http-headeren på skjermen, og deretter taggene til html-dokumentet som programmet lager. Etter lokal verifisering må du kjøre programmet som en klient-serverapplikasjon. For å gjøre dette må du gi programmet kjøringsrettigheter (for operativsystemer der dette er relevant), og plassere det i en katalog der webserveren gjenkjenner programmene som CGI-applikasjoner. Som standard er dette cgi-bin-katalogen, der programmet vårt skal plasseres. For å kjøre programmet må du skrive inn URL-adressen i lokasjonsvinduet: http://localhost/cgi-bin/filnavn Hvordan overføre data mellom klient og server? Vi har allerede sett på hvordan du overfører data fra serveren til klienten. Det neste trinnet er å overføre data fra klienten til serveren og opprette en klient som tar hensyn til informasjonen som overføres til serveren. Det er flere METODER som du kan overføre informasjon til serveren på; De vanligste er GET-metoden, som sender dataene i URL-en, og POST-metoden, som sender dataene i forespørselens brødtekst. Ulempen med den første er den begrensede mengden overført informasjon (opptil 127 byte), ulempen med den andre er vanskeligheten med å lage en forespørsel. Faktisk, for å generere en forespørsel ved hjelp av GET-metoden, er det ganske nok å skrive et spørsmålstegn etter anrops-URLen og liste "navn=verdi"-parene gjennom og-tegnet: http://localhost/cgi-bin/test2. cgi?v1=vasya&v2 =petya og så videre. Nå må du få disse dataene på serveren, som du bare trenger å få innholdet i webservermiljøvariabelen QWERY-STRING. Denne variabelen inneholder det som vises etter spørsmålstegnet i URL-en. Det er imidlertid en funksjon som gjør det vanskelig å bruke denne variabelen. Faktum er at russiske bokstaver, som spesialtegn, er forbudt i URL-en - så de må erstattes med en spesiell kode som ikke inneholder forbudte tegn, og etter å ha mottatt dem på serveren, må de gjen- kodet. Slik omkoding er ganske standard for CGI-programmering, og ethvert Perl-sett inkluderer en modul som kan lese den tilsvarende variabelen, omkode innholdet og dekomponere de mottatte dataene til variabler. Modulen som inneholder disse rutinene kalles CGI. Koble den til programmet ved å skrive: bruk CGI qw(param); hvoretter du kan fange opp en hvilken som helst variabel fra inndatastrømmen ved å skrive, for eksempel: $v1=param("v1"); Nå, hvis du kalte skriptet ved å bruke URL-en ovenfor, vil modulen se etter strømvariabelen "v1" i de mottatte dataene, og etter å ha funnet den, vil den tildele verdien til skalaren $v1, som nå vil være lik "vasya". For å bekrefte riktigheten av konstruksjonene våre, la oss kjøre et program som illustrerer denne dataoverføringen: #!perl
bruk CGI qw(param);
$v1=param("v1");
$v2=param("v2");
print "Innholdstype: tekst/html\n\n";
skrive ut " ";
skrive ut " ";
skrive ut " ";
print "Hei, $v1 , $v2 !!!";
skrive ut "";
POST-metoden overfører data i forespørselens brødtekst, og de skal mottas gjennom inngangsstrømmen til programmet (la meg minne deg på at når programmet startes av webserveren, sendes det til HTTP-protokollen). Skjemaer brukes til å sende data ved hjelp av denne metoden i HTML. For eksempel, ved å utføre skjemaet nedenfor på klienten, vil vi få nøyaktig samme resultat som i forrige eksempel: <HTML>
CGI-modulen som behandler inndataene fungerer nøyaktig på samme måte som ved bruk GET metoden, og når du bruker POST-metoden. Vanlige spørsmål (del to) Noen materialer er brukt fra "Perl FAQ opprettet av SLY Golovanov, 2:5020/794.13" Hvor kan jeg få Perl-dokumentasjon? Først, når Perl er installert, legger den til perldoc-kommandoen til systemet ditt. Kjør den med perldoc-bryteren (dvs. perldoc perldoc) og den vil fortelle deg hvordan du bruker den. For moduler gjør perldoc<имя_модуля>og for interne funksjoner perldoc -f<имя_функции>For det andre er det noen bøker om Perl på russisk: http://doc.marsu.ru/lang/perl/lama/ftp://mshp.minsk.by/pub/incoming/lama.rar ftp: //ftp. kursknet.ru/pub/books/lama_perl.zip ftp://molly.wbt.ru/incoming/lama.rar http://simplex.ru/news/ Og på engelsk: http://solaris.inorg.chem. msu.ru/cs-books/perl/perlbookshelf.zip http://lpcs.math.msu.ru/CD_Bookshelf/Perl_content.tar.bz2 ftp://twilight.telco.md/pub/books/ perlbookshelf.zip http ://meltingpot.fortunecity.com/nj/80/cookbook.rar http://www.effectiveperl.com http://www.perlreference.com http://perlfect.com/articles/ http://www. perlmonth.com/ http://www.stonehenge.com/merlyn/WebTechniques/ http://www.stonehenge.com/merlyn/UnixReview/ http://www.stonehenge.com/merlyn/LinuxMag/ http:// www.plover.com/~mjd/perl/#tpj http://home.od.ua/watman/perl/ http://spider.softclub.net/books/web/ http://athena .vvsu.ru :85/docs/unix/ http://athena.vvsu.ru:85/docs/tcpip/ http://athena.vvsu.ru:85/docs/www/ %%%%%%% %%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% Og her kan du få ferdige skript til ulike formål: www.script.ru www.codemanual.com %%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% Hva skal jeg gjøre hvis skriptet ditt konstant produserer utgangskode nummer 500 (intern serverfeil)? 1. Prøv å kjøre programmet lokalt ved å skrive inn kommandolinjen: perl filnavn(hvor filnavnet er vet du hva). Vær oppmerksom på at hvis du jobber i et Unix-system, hvor det i tillegg til den femte perlen du installerte, sannsynligvis også er en innebygd fjerde, og det er ikke et faktum at den ligger senere på stiene, er det fornuftig å skrive perl5 filnavn fordi den femte perlen vanligvis har et slikt alias. Et forsøk på å kjøre programmer med objektmoduler (som inkluderer CGI-modulen) i Perl 4 vil føre til alvorlige konsekvenser. Hvis programmet var i stand til å kjøre, se på feilmeldingene det produserer. Vær oppmerksom på at KUN den første av de diagnostiserte feilene kan rettes (resten kan induseres). 2. Hvis programmet kjøres lokalt, men ikke startes av serveren, sjekk om programmet angir HTTP-headeren som angir utdatatypen riktig. For å generere HTML-dokumenter bør det være slik:
Sørg for at en slik linje er til stede i programmet ditt før du sender ut tegn til HTTP-strømmen. Enkelt sagt, denne utskriftskommandoen må utføres før enhver annen utskriftskommando. 3. Hvis dette ikke gir resultater, sjekk om Perl du ringer er riktig. På mange UNIX-systemer er den fjerde Perl plassert langs stien: /usr/local/perl og den femte på veien: /usr/local/bin/perl Bare i tilfelle, sørg for at den femte Perl er installert på systemet. 4. Hvis dette ikke hjelper, prøv å huske om filen med redigeringsskriptet ble sendt gjennom tekstredigerere fra Windows. Dette er selvfølgelig bare relevant hvis du kjører skriptet på et Unix-system. Faktum er at Windows og Unix har forskjellige linjeavslutningstegn. Enhver innebygd Windows editor opererer på Windows standard linjeender, men Unix kan ikke kjøre en slik fil. For å bekjempe denne effekten, anbefales det å enten opprette og redigere filer kun på Unix-systemer, eller opprette og redigere dem på Windows kun med den innebygde editoren til FAR-manageren, som lar deg velge hvilken type fil som skal opprettes ved å trykke shift-F2. Som standard bruker denne editoren de linjeavslutningene som allerede er i filen (det vil si at en fil opprettet i UNIX kan lagres "som den er" uten å tenke på typen). Hvis skriptet ditt allerede er opprettet i Windows standard, og du vil kjøre den på Unix, bruk for eksempel dette programmet: $v1 = "\x0d";
åpne A, "f1";
while ($line= )
{
$line =~ s/$v1//g;
$itog .= $line;
}
lukke A;
åpne B, ">f1";
print B "$itog";
lukk B;
Dette programmet åpner for å lese en fil kalt f1, som ligger på lanseringsstedet, leser derfra alle linjene etter tur, og erstatter slutten på hver av dem. Etter lesing åpner programmet den samme filen som en ny for skriving og skriver resultatet til den. 5. Som en siste sjanse, sjekk om skriptet har rettigheter til å lese og kjøre på den delen av brukeren som webserveren kjører fra. Nei, du må fortsatt sjekke det. Hvis dette ikke hjelper deg, skriv til konferansen. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%% Hvordan se alle nettservermiljøvariabler som er aktive for øyeblikket? for (nøkler %ENV) ( skriv ut "$_ = $(ENV($_))\n" ) %%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Hva er informasjonskapsler og hva er de for? Nøkler er en måte å åpne en fil på klientens disk. Siden en slik fil er et potensielt virus, må denne prosedyren være riktig beskyttet på nettlesernivå. Nøkkelen kan installeres så lenge den kjører nettleseren eller for en viss periode. For den første typen nøkler trenger du ikke å angi tidspunktet når nøkkelen skal slettes; for den andre typen må du spesifisere denne tiden, og i et format som er tilgjengelig for nettleseren. Hvis nettleseren ikke kan sette datoene i kalenderen når nøkkelen skal slettes, vil den slette den første gang du lukker programmet. For å automatisere prosessen med å kompilere en dato, brukes en prosedyre som setter datoen en måned frem fra nåværende øyeblikk: sub get_cookie_date(
min(@dag, @man, $i, $count, $sec,$min,$hours,$mday,$man,$year, $wday, $yday,
$isdst, $result);
($sec,$min,$hours,$mday,$man,$year, $wday, $yday, $isdst)=gmtime(time+2592000);
@day=("søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag",
"Lørdag");
@mon=("Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt",
"nov", "des");
if($år >= 100)(
$år = $år - 100;
if($år< 10){$year = "0$year";}
}
$result=$dag[$wday].", ".$mday."-".$man[$man].."-".$year."
".$timer.":".$min.":".$sek." GMT";
returnere $resultat;
}
Ikke glem å legge inn en skalar banen til programmet ditt fra roten til det tilsvarende serverområdet. Det er ikke nødvendig å spesifisere programnavnet, det vil bli sendt separat. For eksempel: $path = "/cgi-bin";
Nå kan du alltid installere nøkkelen ved å utføre følgende kodebit i programmet: $date=get_cookie_date();
print "Set-Cookie: login=$log; path=$path; expires=$date\n";
print "Set-Cookie: passord=$pas; bane=$bane; utløper=$dato\n";
For å lese nøkkelen er det også gitt en spesiell prosedyre: sub get_cookie(
min (%cook, @temp, $i, $count, $key, $value);
(@temp)=split(/;/, $ENV("HTTP_COOKIE"));
$count=@temp;
for ($i=0; $i<$count; $i++){
$temp[$i]=~s/ //;
($key, $value)=split(/=/, $temp[$i]);
$cook($key)=$verdi;
}
returner %cook;
}
Etter dette kan du få nøkkelverdien, for eksempel slik: if ($ENV(HTTP_COOKIE))($cookies=1; %cookies=get_cookie();)
annet ($cookies=0;)
if ($cookies==1)
{
$login=$cookies("pålogging");
$pass=$cookies("passord");
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%% Hvordan kopiere en fil fra nettverket? Den enkleste måten er å installere libwww-modulen på systemet ditt, som lar deg gjøre dette. Her er et eksempel på bruken:
#!/usr/local/bin/perl
bruk LWP::UserAgent;
bruk CGI qw(header);
min $URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";
min $res = LWP::UserAgent->new->request(ny HTTP::Request GET => $URL);
binmode(STDOUT);
skriv ut $res->innhold;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%% Hvordan kopiere en fil til serveren? For å gjøre dette må du bruke Multipart-kodingen til postmetoden; den lar deg overføre til og med binære filer til serveren, og størrelsen deres er ikke begrenset. Dessverre er det ikke alle nettlesere som støtter denne kodingen. Netscape har hatt det siden versjon 2, MSIE har hatt det siden versjon 3.02. Her er et eksempel på bruk av denne metoden: #!/usr/local/bin/perl
bruk CGI qw(param);
$mode=param("modus");
$fil=param("fil");
# katalog der den mottatte filen er skrevet.
$fup = "/huge/httpd/htdocs/ufo/up";
if ($mode eq "last opp")
{
print "Innholdstype: tekst/html\n\n";
@navn= delt(/\\/, $fil);
@navn= reverse(@navn);
($fil1) = @navn;
$file_new="$fup/"."$fil1";
åpne A, "+>$file_ny";
binmode A;
binmode $fil;
while ($bytesread = read($file, $buf, 1024))
{
print A $buf;
}
lukke A;
skrive ut " ";
skrive ut "
print "Filen har blitt overført til serveren.
";
skrive ut " ";
skrive ut "";
skrive ut "";
}
elsif ($mode eq "")
{
print "Innholdstype: tekst/html\n\n";
skrive ut " ";
skrive ut " ";
skrive ut "
Advarsel. Filoverføringsprogrammet fungerer ikke fra nettleseren -
Vi har Internet Explorer-versjoner under 3.2"; skriv ut "
skrive ut "";
skrive ut "";
}
Vanlige spørsmål (del tre) Hvordan sende et brev (på et UNIX-system). For å jobbe med post på UNIX-systemer brukes Sendmail-programmet tradisjonelt. Du kan få tilgang til den direkte, eller du kan bruke e-postkommandoen. I alle fall må du først forberede adressene ved å erstatte "@"-symbolet i dem med "\@" - ellers kan ikke programmet kjøres. $as1="@";
$as2="\@";
$mails =~ s/$as1/$as2/g; der $mails er en adresse eller en rekke adresser atskilt med mellomrom. Brevene sendes tradisjonelt i koi-8-koding, som teksten vår må oversettes til. Dette kan gjøres ved å skrive teksten til meldingen, for eksempel, inn i skalaren $as4 og deretter utføre følgende operasjon på dem (for å konvertere fra 1251-koding til koi-8-koding): $as4 =~
tr/ABVGDEZHZIYKLMNOPRSTUFHTSCHSHSHSHYYYYYAabvgdezhzijklmnoprstufhtsshshshjyeyeyoyey/bvchzdetsy
klmnoprtufhzhigyuyeyashshaasBVCHZDETSYKLMNOPRTUFHZHIGYUYEYASHSHASi?/;
Åpne MAILL, "|mail -s \"Emne\" $mails";
# Den skalære $mails viser alle adresser atskilt med mellomrom
skriv ut POST "$as4"; # dette er brødteksten i brevet
lukk MAILL; Ved å bruke Sendmail-programmet kan du sende et brev som følger: open(MAIL, "|/usr/lib/sendmail -f $from_addr $mails");
print MAIL "Emne: emnetekst\n";
print MAIL "content-type: text/html; charset=koi8-r\n\n";
print MAIL "Til: $user<$to_addr>\n"; # Hvilken adresse du skal svare på.
skriv ut MAIL "$as4";
lukk MAIL;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Hvordan lese et akseptert brev? Den enkleste måten er å bruke postbiblioteket. #!/usr/local/bin/perl
bruk Mail::POP3Client;
$pop = new Mail::POP3Client("pålogging", "passord", "mail.server.ru");
for ($i = 1; $i<= $pop->Telle; $i++) (
$bbb = $pop->Body($i);
$aaa = $pop->Hode($i);
foreach ($pop->Head($i)) (/^(Fra|Emne): / og skriv ut $_, "\n";)
# $pop->Slett($i); #slik sletter de et lest brev
skriv ut "$aaa\n";
skriv ut "$bbb\n";
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%% LWP FAQ av Paul Kulchenko ( [e-postbeskyttet]), oppdatert 04/03/2000 Dette er en beskrivelse av en LWP-modul (noen ganger kalt LibWWW) som inneholder mange svært nyttige funksjoner. ================================================== === ==================== 1.1. Hvordan få tekstfil (http, ftp)? 1.2. Hvordan får jeg jpeg/gif/bmp-fil og returnerer den? 1.3. Hvordan få tilgang til passordbeskyttet fil? 1.4. Hvordan sette opp REFERER og andre HTTP-header-parametere? 1.5. Hvordan få spesifisert del av filen (første MAXSIZE byte)? 1.6. Hvordan får og konfigurerer informasjonskapsler? 1.7. Hvordan spesifisere proxy-servere? 1.8. Hvordan se etter omdirigering? 1.9. Hvordan lage parametere for POST-metoden? ================================================== === ==================== 1.1. Hvordan få tekstfil (http, ftp)? Hvordan motta en fil via http eller ftp bruk LWP::UserAgent;
Min $URL = " http://www.yahoo.com/";
min $res = LWP::UserAgent->new->request(ny HTTP::Request GET => $URL);
print header, $res->is_success ? $res->innhold: $res->statuslinje;
================================================== === ==================== 1.2. Hvordan får jeg jpeg/gif/bmp-fil og returnerer den? Hvordan få et bilde. bruk LWP::UserAgent;
bruk CGI qw(header -no_debug);
$URL="
http://a100.g.akamaitech.net/7/100/70/0001/www.fool.com/art/new/butts/go99
.
gif";
min $res = LWP::UserAgent->new->request(ny HTTP::Request GET => $URL);
binmode(STDOUT);
print $res->is_success ? (header("bilde/gif"), $res->innhold)
: (header("text/html"), $res->status_line);
================================================== === ==================== 1.3. Hvordan få tilgang til passordbeskyttet fil? Hvordan skrive inn et passord. BEGYNNE (
packageRequestAgent;
bruk LWP::UserAgent;
@ISA = qw(LWP::UserAgent);
Sub new ( LWP::UserAgent::new(@_); )
sub get_basic_credentials ( returner "bruker", "passord" )
}
bruk CGI qw(header -no_debug);
Min $res = RequestAgent->new->request(ny HTTP::Request GET => $URL);
print header, $res->is_success ? $res->innhold: $res->statuslinje;
================================================== === ==================== 1.4. Hvordan sette opp REFERER og andre HTTP-header-parametere? Hvordan stille inn sesjonsmiljøvariabler. bruk LWP::UserAgent;
bruk HTTP::Headers;
bruk CGI qw(header -no_debug);
Min $URL = " http://localhost/cgi-bin/hello.cgi
";
min $res = LWP::UserAgent->new->request(
ny HTTP::Request(
GET => $URL,
ny HTTP::Headers referer => "
http://www.yahoo.com
"),
);
print header, $res->is_success ? $res->innhold: $res->statuslinje;
================================================== === ==================== 1,5. Hvordan få spesifisert del av filen (første MAXSIZE byte)? Hvordan få en del av en fil. bruk LWP::UserAgent;
bruk CGI qw(header -no_debug);
Min $URL = " http://www.yahoo.com/
";
min $MAXSIZE = 1024;
Skriv ut topptekst;
min $res = LWP::UserAgent->new->request(
ny HTTP::Request(GET => $URL), \&callback, $MAXSIZE);
Sub callback (my($data, $response, $protocol) = @_; print $data; die )
================================================== === ==================== 1,6. Hvordan får og konfigurerer informasjonskapsler? Hvordan installere og lese nøkkelen. bruk LWP::UserAgent;
bruk CGI qw(header -no_debug);
bruk HTTP::informasjonskapsler;
Min $URL = "http://mail.yahoo.com/";
Min $ua = nye LWP::UserAgent;
min $res = $ua->request(ny HTTP::Request GET => $URL);
min $cookie_jar = nye HTTP::informasjonskapsler;
$cookie_jar->extract_cookies($res);
Skriv ut topptekst;
if ($res->is_success) (
min $req = ny HTTP::Request GET => $URL;
$cookie_jar->add_cookie_header($req);
$res = $ua->request($req);
print $res->is_success ? $res->as_string: $res->status_line;
) annet (
skriv ut $res->status_line;
}
================================================== === ==================== 1.7. Hvordan spesifisere proxy-servere? Hvordan jobbe gjennom en proxy. bruk LWP::UserAgent;
bruk CGI qw(header -no_debug);
Min $URL = " http://www.yahoo.com/
";
min $ua = ny LWP::UserAgent;
$ua->proxy(["http", "ftp"], " http://proxy.sn.no:8001/
");
$ua->proxy("gopher", "
http://proxy.sn.no:8001/
");
Min $res = $ua->request(ny HTTP::Request GET => $URL);
print header, $res->is_success ? $res->innhold: $res->statuslinje;
================================================== === ==================== 1,8. Hvordan se etter omdirigering? Hvordan lage en omdirigering bruk LWP::UserAgent;
bruk CGI qw(header -no_debug);
Min $URL = " http://www.yahoo.com/
";
min $res = LWP::UserAgent->new->request(ny HTTP::Request GET => $URL);
Skriv ut topptekst;
skriv ut $res->request->url hvis $res->previous->is_redirect;
================================================== === ==================== 1,9. Hvordan lage parametere for POST-metoden? Hvordan sende en forespørsel ved hjelp av POST-metoden uten å bruke et skjema. bruk URI::URL;
bruk HTTP::Request;
bruk LWP::UserAgent;
bruk CGI qw(header -no_debug);
Min $URL = " http://yahoo.com/?login=mylogin&password=mittpassord
";
min $uri = ny URI $URL;
min $metode = "POST";
Min $forespørsel;
if (uc($method) eq "POST") (
min $query = $uri->query;
(min $url = $uri->as_string) =~ s/\?$query$//;
$request = ny HTTP::Request ($method, $url);
$request->header("Content-Type" => "application/x-www-form-urlencoded");
$request->content($query);
) annet (
$request = ny HTTP::Request ($method, $uri->as_string);
};
# legg til vertsfelt etter behov i HTTP/1.1
$request->header(Host => $uri->vert_port) hvis $uri->skjema er "fil";
Min $res = LWP::UserAgent->new->request($request);
Skriv ut topptekst, $res->is_success ? $res->innhold: $res->statuslinje;
====================================================================