Thread LWP::UserAgent und 401 Unauthorized (45 answers)
Opened by bianca at 2013-06-12 21:07

Linuxer
 2013-06-15 22:06
#168314 #168314
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hi,

entweder musst Du Dein LWP::Authen::Digest patchen, oder die Gegenstelle muss Ihren Code anpassen.

Firefox schickt die Werte der Authorization Optionen qop, nc, algorithm OHNE "".
Das normale LWP::UserAgent setzt hier die "" aber. Was nun das korrekte Verhalten wäre, weiß ich nicht.

Ich habe hier meine LWP::Authen::Digest überarbeitet und damit kann ich mit Deinem Skript die Datei runterladen.

Ich konnte es sogar soweit runterbrechen, dass es NUR die Option "nc" ist, deren Inhalt OHNE "" geschickt werden muss.

Ich vermute fast, dass das eher ein Problem auf der empfangenden Seite ist. Warum werden dort die "" ausgewertet und nicht als Begrenzer entfernt? Ein Grund könnte sein, dass man denkt, da steht eh nur eine Zahl drin und kein String, da braucht man keine ""...

In der LWP::Authen::Digest wird eine Methode definiert, an deren Ende eine Schleife steckt, in der das passiert:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
# original:

sub auth_header {
...
    for (@order) {
    next unless defined $resp{$_};
    push(@pairs, "$_=" . qq("$resp{$_}"));
    }

    my $auth_value  = "Digest " . join(", ", @pairs);
    return $auth_value;
}


Ändere ich das Modul auf das folgende ab, funktioniert es bei mir.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# modifiziert
sub auth_header {
...
    for (@order) {
        next unless defined $resp{$_};

        if ( $_ eq 'nc' ) {
            push(@pairs, "$_=" . qq($resp{$_}));
        }
        else {
            push(@pairs, "$_=" . qq("$resp{$_}"));
        }
    }

    my $auth_value  = "Digest " . join(", ", @pairs);
    return $auth_value;
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread LWP::UserAgent und 401 Unauthorized