Avatar billede sarid Nybegynder
12. april 2003 - 17:04 Der er 2 kommentarer og
1 løsning

GET resultater i en %HASH

Jeg har noget kode, der ser således ud:

$ua = LWP::UserAgent->new(keep_alive => 1, timeout => 60);
$request = HTTP::Request->new('GET','http://www.google.com");
$response = $ua->request($request);
%response = %{$response};
$response_ref = $response{_headers} ;
%headers = %{$response_ref};
while (($key, $value) = each(%headers)) {
    print("$key => $value\n");
}

Jeg vil gerne gøre det samme bare med en socket.  Jeg har følgende:

my $socket = IO::Socket::INET->new(Proto => 'tcp', PeerAddr => 'www.google.com', PeerPort => 80) || die($!);
print($socket "GET / HTTP/1.0\n\r\n\r");

while (<$socket>) {
    $response .= $_;
}

%response = %{$response};
$response_ref = $response{_headers} ;
%headers = %{$response_ref};
while (($key, $value) = each(%response)) {
    print("$key => $value\n");
}

Men jeg får ikke noget ud.  Hvad gøre jeg forkert?
Mange tak!
Avatar billede sarid Nybegynder
12. april 2003 - 17:10 #1
Jeg kan ikke få fat i de enkelte dele i headeren når jeg bruger en socket, og det er netop det jeg vil: _rc, mm.
Avatar billede erikjacobsen Ekspert
12. april 2003 - 18:14 #2
Du kan:

#!/usr/bin/perl -W

use IO::Socket::INET;

my $socket = IO::Socket::INET->new(Proto => 'tcp', PeerAddr => 'www.google.com', PeerPort
=> 80) || die($!);
print($socket "GET / HTTP/1.0\n\r\n\r");

while (<$socket>) {

  chomp;
  if (/^HTTP/) {
    # not a header
  } elsif (/^([a-z0-9_-]+):\s*(.*)/i) {
    $headers{$1} = $2;
  } else {
    last;
  }
}

while (($key, $value) = each(%headers)) {
  print("$key => $value\n");
}
Avatar billede sharpe Nybegynder
27. maj 2003 - 15:32 #3
sub do_request($$)
{
  my ($request, $host, $socket, $data);
  my %HEADERS;

  $request = shift();
  $host = shift();
  $socket = IO::Socket::INET->new(PeerAddr => "www.google.com",
                                  PeerPort => "http(80)",
                                  Proto => "tcp") || die($!);
  print($socket "GET $request http:\/\/HTTP\/1.0\nHost: $host\n
  while ($data = <$socket>)
  {
    chomp($data);
    if ($data =~ /^HTTP\/1\.\d\s(\d{3})/) {
      $HEADERS{_rc} = $1;
    } elsif ($data =~ /^([a-z0-9_-]+):\s*(.*)/i) {
      $HEADERS{$1} = $2;
    } else {
      last();
    }
  }
  shutdown($socket, 2);
  return %HEADERS;
}
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
Kurser inden for grundlæggende programmering

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