HttpUtils redirect ergänzung

Begonnen von justme1968, 02 September 2015, 12:30:51

Vorheriges Thema - Nächstes Thema

justme1968

ich habe eben ein problem mit einem redirect und den HttpUtils gehabt.

der server um den es geht schickt mirLocation: index.asp?bad=1 zurück. wenn das dann so$hash->{url} = ($ra =~ m/^http/) ? $ra: $hash->{addr}.$ra;zur neuen url verknüpft wird fehlt zwischen addr und $ra der /.

mit eingefügtem / geht alles:--- HttpUtils.pm (revision 9193)
+++ HttpUtils.pm (working copy)
@@ -366,6 +366,7 @@
     } else {
       my $ra;
       map { $ra=$1 if($_ =~ m/Location:\s*(\S+)$/) } @header;
+      $ra = "/$ra" if($ra !~ m/^http/ && $ra !~ m/^\//);
       $hash->{url} = ($ra =~ m/^http/) ? $ra: $hash->{addr}.$ra;
       Log3 $hash, $hash->{loglevel}, "HttpUtils $hash->{displayurl}: ".
           "Redirect to ".($hash->{hideurl} ? "<hidden>" : $hash->{url});


oder lieber gleich mit if zwischen http: und nicht http: unterscheiden?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

Das funktionier aber nicht, wenn du:

- URL http://www.foo.bar/web/index.php

Umleitung nach "login.php"

- neue URL nach deinem Patch währe dann: http://www.foo.bar/login.php

- richtig wäre aber:  http://www.foo.bar/web/login.php
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

ich glaube das ist ein fall der jetzt sowieso nicht funktioniert.

mein patch ergänzt nur den fehlenden / zwischen $hash->{addr} und $ra;

$hash->{addr} wird zeit zeit beim connect so aufgebaut:
$hash->{addr} = "$hash->{protocol}://$host:$port";


laut rfc müsste man glaube ich den redirect an die request url anhängen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

Zitat von: justme1968 am 02 September 2015, 14:57:25
laut rfc müsste man glaube ich den redirect an die request url anhängen.

gruss
  andre

Man muss die alte URL nehmen, wo rauf man eine Umleitung erhalten hat.

wenn die neue URL aus der Umleitung nicht mit "http" beginnt:

   - alte URL nehmen und von rechts nach links alles bis zum nächsten "/" entfernen (Base URL).
   - dann Base URL mit Umleitung concatten (auf einmaliges "/" explizit achten) => Neue URL
   - Neue URL aufrufen
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

ja so in etwa. laut rfc sollten aber z.b. anchor bestandteile der url erhalten bleiben. ich glaube es gibt noch ein paar andere sonderfälle.

@rudi: möchtet du eine komplette lösung oder reicht es erst mal den fehlenden / einzufügen bis die genaue umsetzung tatsächlich relevant ist?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Sorry, habe die Diskussion irgedwie verpasst.
Ich habe den Vorschlag eingecheckt.

justme1968

und ich habe mir schon gedanken gemacht  :)

danke
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968