patch:httputils header als hash übergeben

Begonnen von justme1968, 03 November 2015, 13:43:07

Vorheriges Thema - Nächstes Thema

justme1968

mit dem angehängten patch ist es möglich $hash->{header} auch als hash zu übergeben. das ist vor allem bei dynamische headern praktisch.

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

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

Markus Bloch

In letzter Zeit wird HttpUtils.pm ja richtig hart rangenommen.  ::)

Zu deinem Patch: So funktioniert das leider bei Digest-Authentifikation nicht.

bitte beachte ab Zeile 434 im aktuellen SVN:


  # if servers requests digest authentication
  if($code==401 && defined($hash->{auth}) &&
    !($hash->{header} && $hash->{header} =~ /^Authorization:\s*Digest/mi) &&
    $hash->{httpheader} =~ /^WWW-Authenticate:\s*Digest\s*(.+?)\s*$/mi) {
   
    $hash->{header} .= "\r\n".
                      HttpUtils_DigestHeader($hash, $1) if($hash->{header});
    $hash->{header} = HttpUtils_DigestHeader($hash, $1) if(!$hash->{header});

    # Request the URL with the Digest response
    if($hash->{callback}) {
      HttpUtils_NonblockingGet($hash);
      return ("", "", 1);
    } else {
      return HttpUtils_BlockingGet($hash);
    }


Viele Grüße

Markus
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

die einfache variante wäre den aus dem hash erzeugten string nach $hash->{header} zurück zu schreiben. wie in der hier  angehängten variante.

hat jemand eine elegantere idee?

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

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

Markus Bloch

Zitat von: justme1968 am 03 November 2015, 18:39:56
hat jemand eine elegantere idee?

ich würde es so machen (ungetestet):

  if(defined($hash->{header})) {
    if( ref($hash->{header}) eq 'HASH' ) {
      $hash->{header} = join("\r\n", map(($_.': '.$hash->{header}{$_}), keys($hash->{header})));
      }
   }


Gruß
Markus
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. natürlich. gute idee. der else zwei ist überflüssig und es wird ja nichts mehr mit den werten gemacht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig


justme1968

fertig :)

die version von markus ist die ist gut:Index: HttpUtils.pm
===================================================================
--- HttpUtils.pm (revision 9766)
+++ HttpUtils.pm (working copy)
@@ -240,6 +240,12 @@
     }
   }

+  if(defined($hash->{header})) {
+    if( ref($hash->{header}) eq 'HASH' ) {
+      $hash->{header} = join("\r\n", map(($_.': '.$hash->{header}{$_}), keys($hash->{header})));
+      }
+   }
+
   $hash->{host} =~ s/:.*//;
   my $method = $hash->{method};
   $method = ($data ? "POST" : "GET") if( !$method );
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig


justme1968

es gibt perl versionen die mögen diese version nicht. so sollte es besser sein:
Index: HttpUtils.pm
===================================================================
--- HttpUtils.pm (revision 9780)
+++ HttpUtils.pm (working copy)
@@ -243,7 +243,7 @@
   if(defined($hash->{header})) {
     if( ref($hash->{header}) eq 'HASH' ) {
       $hash->{header} = join("\r\n",
-        map(($_.': '.$hash->{header}{$_}), keys($hash->{header})));
+        map(($_.': '.$hash->{header}{$_}), keys(%{$hash->{header}})));
       }
    }
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Hat Martin schon eingecheckt, ich hoffe noch, dass aus versehen.