FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 03 November 2015, 13:43:07

Titel: patch:httputils header als hash übergeben
Beitrag von: justme1968 am 03 November 2015, 13:43:07
mit dem angehängten patch ist es möglich $hash->{header} auch als hash zu übergeben. das ist vor allem bei dynamische headern praktisch.

Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: Markus Bloch am 03 November 2015, 18:15:09
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
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: justme1968 am 03 November 2015, 18:39:56
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
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: Markus Bloch am 03 November 2015, 20:12:02
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
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: justme1968 am 03 November 2015, 20:49:11
ja. natürlich. gute idee. der else zwei ist überflüssig und es wird ja nichts mehr mit den werten gemacht.
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: rudolfkoenig am 03 November 2015, 21:53:36
Wenn ihr fertig seid, biotte melden :)
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: justme1968 am 03 November 2015, 21:58:24
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 );
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: rudolfkoenig am 04 November 2015, 07:10:49
Eingecheckt.
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: justme1968 am 04 November 2015, 19:49:53
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}})));
       }
    }
Titel: Antw:patch:httputils header als hash übergeben
Beitrag von: rudolfkoenig am 05 November 2015, 06:40:15
Hat Martin schon eingecheckt, ich hoffe noch, dass aus versehen.