webForumDet fria alternativet

Identifiera sig(user-agent)!

Programmeringur Perl, Python, Ruby och övrig CGI

4 svar · 370 visningar · startad av higa

Medlem sedan aug. 2000359 inlägg
Frågan#1

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?

Medlem sedan dec. 19992 555 inlägg
#2

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 >

Medlem sedan aug. 2000359 inlägg
#3

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>
Medlem sedan juni 20004 308 inlägg
#4

Ä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;
	}
}
Medlem sedan aug. 2000359 inlägg
#5

Stort tack!
Nu funkar det som det ska!

135 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)