2009-04-03 18 views
1

Ich schreibe ein einfaches Programm, das einige Daten auf der polnischen Auktionsseite ändern muss.WWW :: Mechanize und "HTTP :: Message Inhalt muss Bytes bei ... sein"

Einer der Schritte beinhaltet Laden der Bearbeitungsseite, Ändern eines Wertes und Senden.

Beispielseite kann hier angesehen werden: http://depesz.com/various/new_item.php.html - dies ist nur statische Kopie einer solchen Bearbeitungsseite.

Relevante Teil meines Perl-Code:

$agent->form_number(1); 
$agent->submit(); 
$agent->form_number(1); 

my $q = $agent->current_form()->find_input('scheme_id'); 
$agent->field('scheme_id', '1025'); 
# $agent->field('description', encode('utf-8', $agent->value("description"))); 
# $agent->field('location', encode('utf-8', $agent->value("location"))); 
# $agent->field('transport_shipment_description', encode('utf-8', $agent->value("transport_shipment_description"))); 
$agent->submit; 
print $agent->response->decoded_content . "\n"; 

Nach dem ersten übermittelt ich die Seite bekomme ich zeigte. Dann ändere ich den Wert im Feld scheme_id auf 1025 und sende das Formular ab.

Danach erhalte ich:

HTTP::Message content must be bytes at /usr/local/share/perl/5.8.8/HTTP/Request/Common.pm line 91 

Ich habe versucht, Werte auf Textfelder auf dem Formular neu zu kodieren - daher der agenten> Feld (... kodieren) Linien, aber es hat nicht geholfen.

Im Moment habe ich keine Ahnung, was auf dem Formular WWW :: Mechanize zum Scheitern bringen kann, aber ich kann mich eindeutig nicht darauf festlegen.

Gibt es eine Möglichkeit, diese Situation zu debuggen? Oder sollte ich etwas anders machen?

Antwort

1

Stellen Sie sicher, dass Ihre LWP- und WWW-Mechanize-Module auf dem neuesten Stand sind. LWP hat Ende 2008 eine Reihe von Codierungsproblemen behoben, wenn ich mich richtig erinnere.

+0

Hinweis: Ich bin nicht sicher, das wird das Problem vollständig lösen, aber ich bin nicht sicher, was zu überprüfen. Ich weiß nur, als ich in der Vergangenheit auf diesen Fehler stieß, war es ein Codierungsproblem. Ich hoffe es hilft. – Frakkle

+0

Leider sind beide auf dem neuesten Stand: => ModVer LWP Version 5.825 => ModVer WWW :: Mechanize Version 1.54 –

+0

Haben Sie wieder versucht, zu aktualisieren? WWW :: Mechanize 1.56 hat die Art und Weise geändert, wie es mit Codierungen umgeht: "Eine Weile lang hat Mech HTTP :: Response :: Encoding verwendet, um die richtige Kodierung der empfangenen Seite auszulösen. Jetzt kann es LWP :: UserAgent Erledigen Sie die Arbeit und nicht mehr HTTP :: Response :: Encoding. " – cjm

Verwandte Themen