Avatar billede s.mortensen Nybegynder
23. marts 2005 - 11:37 Der er 16 kommentarer og
1 løsning

Hvordan foretager jeg et - Low level HTTP kald?

Jeg har et script der finder alle links på en side.
Disse links går som regel igennem en redirect side, og parser den URL der skal redirectes til som en parameter...

Det er URL'en jeg er interesseret i, så i de fleste tilfælde kan jeg snuse den ud fra linket...
Men ikke altid!
Nogen gange er det et ID og et database opslag på redirect siden der afgør hvor brugeren sendes hen...

I disse tilfælde vil jeg gerne være i stand til at snuse mig frem til redirect headeren der returneres fra redirect scriptet, uden at loade hele siden...

Dette skal være så high performance som muligt...
Avatar billede barklund Nybegynder
23. marts 2005 - 11:42 #1
Lav en socketforbindelse til serveren på port 80 og lav en HEAD forespørgsel på den. Eller hvis du ikke vil bøvle med alt muligt, brug command line `curl -I $url` og læs svaret fra denne :)

--
Morten Barklund
Avatar billede s.mortensen Nybegynder
23. marts 2005 - 11:47 #2
hmmm det skal være i PHP, og SAFE MODE er ON...
Så jeg kan ikke lave kommando linie kald fra PHP...
Avatar billede barklund Nybegynder
23. marts 2005 - 11:57 #3
Så tror jeg det bliver fsockopen - men der skal jo ikke mange linjer til et HEAD kald :)
Avatar billede s.mortensen Nybegynder
23. marts 2005 - 12:00 #4
sikkert ikke, men jeg har ikke rodet med det før, så jeg ved det ikke...
Jeg vil se hvad jeg kan få ud af dine gode men sparsomme informationer ;-)
Avatar billede rednex Nybegynder
23. marts 2005 - 12:02 #5
Jeg kan ikke huske om du kan bruge fopen('http://...') under safe_mode, ellers må du igang med sockets.
Avatar billede barklund Nybegynder
23. marts 2005 - 12:04 #6
Tag eksemplet fra http://dk2.php.net/fsockopen:

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
  echo "$errstr ($errno)<br />\n";
} else {
  $out = "GET / HTTP/1.1\r\n";
  $out .= "Host: www.example.com\r\n";
  $out .= "Connection: Close\r\n\r\n";

  fwrite($fp, $out);
  while (!feof($fp)) {
      echo fgets($fp, 128);
  }
  fclose($fp);
}
?>

Ret GET til HEAD og du er go :)

Hvis du modtager en 302-status retur, så angiver location-header url'en på den nye side - måske. Den nye side kan jo igen kaste en location-header :)

Hvis du får en status 200 er siden den rigtige. :)

--
Morten Barklund
Avatar billede barklund Nybegynder
23. marts 2005 - 12:05 #7
Men nu ville han jo netop ikke fopen'e hele siden - for der er jo ingen grund til at downloade det hele bare for at se, om url'en er rigtig :)
Avatar billede rednex Nybegynder
23. marts 2005 - 12:06 #8
Det er nok en god idé at rette HTTP/1.1 til HTTP/1.0 så du ikke risikerer at skulle bokse med chunks og komprimering og den slags.
Avatar billede s.mortensen Nybegynder
23. marts 2005 - 12:07 #9
tak, skal I ha... jeg vil kigge på det senere og dele point ud med strø-hånd :)
Der er lige dukket noget andet op, som jeg MÅ se til...
Avatar billede barklund Nybegynder
23. marts 2005 - 12:09 #10
Tja, der kommer jo ingen body med på en HEAD - så komprimering og øvrig formattering har vel ingen betydning.

Og derudover er der nogle webservere, der returnerer en fejlside, hvis man bruger 1.0 - herunder microsoft.com :)
Avatar billede rednex Nybegynder
23. marts 2005 - 12:20 #11
Du har ret i at det ikke betyder noget i dette tilfælde, men det var nu også nærmere ment som en generel betragtning.

Jeg har aldrig haft problemer med HTTP/1.0 nogen steder, og jeg kunne da ikke dy mig for at lave et request til M$. Ingen problemer - 200 OK. At den så svarer i HTTP/1.1 alligevel er jo så en anden snak.
Avatar billede barklund Nybegynder
23. marts 2005 - 12:25 #12
Hm, jeg bøvlede engang med VMWare og en ældgammel WinNT version.

Den havde kun en IE2.0 der kun sendte HTTP/1.0 - og det betød at jeg slet ikke kunne downloade en nyere version, for den del af sitet, hvor man downloadede IE, ville ikke godkende min HTTP-version.

Det var et kæmpe bøvl :(
Avatar billede rednex Nybegynder
23. marts 2005 - 12:34 #13
Nå ja, ingen regel uden undtagelse :oP Men det skal vi heller ikke tærske langhalm på - det var bare en indskydelse :o)
Avatar billede s.mortensen Nybegynder
23. marts 2005 - 14:09 #14
det var rigeligt til at få mig videre med projektet.. jeg takker!
Avatar billede barklund Nybegynder
23. marts 2005 - 14:14 #15
Så kaster jeg et svar - held og lykke :)
Avatar billede barklund Nybegynder
23. marts 2005 - 14:18 #16
Og tark for points :)
Avatar billede s.mortensen Nybegynder
23. marts 2005 - 14:42 #17
velbekomme... jeg er sgu glad for hjælpen...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester