higaMedlem sedan aug. 2000359 inlägg Jag har skrivit ett litet program i Perl som hämtar hem html dokument som den skojar till texten på, men nu är det så att vissa siter funkar som vanligt, medans vissa lämnar följande felmeddelande:
Due to malformed syntax, the request could not be understood by the server. The client should not repeat the request without modifications.
Några siter föreslår även att jag laddar hem en ny version av Netscape eller MSIE, så tydligen är problemet att min user-agent inte är satt, men hur sätter man user-agent?
RobbanMedlem sedan dec. 19992 555 inlägg Använder du modulen LWP::UserAgent?
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
$obj->agent('Foozilla/7.1');
</font>
------------------
Robban < robban@lipogram.com >
higaMedlem sedan aug. 2000359 inlägg Jag körde förut bara med Socket.pm, men jag prövade att byta ut den mot LWP, och följde instruktionerna för LWP i html-manualen för Activeperl.
En del sidor som t ex www.aftonbladet.se och www.renderosity.com funkar nu till skilnad från förut, men bl a www.sodertalje.se och www.microsoft.com funkar inte.
Följande kod har jag i början av scriptet:
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("Mozilla/4.0" . $ua->agent);
Och här är funktionen för att hämta hemsidor:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
sub hamta_sida
{
my($hemmis) = @_;
# Create a request
my $req = new HTTP::Request POST => $hemmis;
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
if ($res->is_success)
{ $res->content; }
else
{ "Content-Type:text/html\n\nBad luck this time\n"; }
}
</font>
JojoxxMedlem sedan juni 20004 308 inlägg Ändrade lite i ditt exempel, hoppas det är ok.
use HTTP::Request;
use LWP::UserAgent;
$html = hamta_sida('http://www.jojoxx.net/','Mozilla/12.3');
print $html;
sub hamta_sida {
$ua = LWP::UserAgent->new;
$ua->agent($_[1]);
$request = HTTP::Request->new(GET => $_[0]);
$response = $ua->request($request);
if ($response->is_success) {
return $response->content;
} else {
return $response->error_as_HTML;
}
}
higaMedlem sedan aug. 2000359 inlägg Stort tack!
Nu funkar det som det ska!