[GELÖST] HttpUtils_NonblockingGet und $param->{url} fester String ...

Begonnen von CoolTux, 16 Juni 2020, 14:16:44

Vorheriges Thema - Nächstes Thema

CoolTux

Ich habe nun den halben Vormittag damit verbracht meinen Fehler zu finden, ich finde keinen.

my $param = {
            url         => $ncURI,
            timeout     => 10,
            method      => 'PUT',
            data        => $cont,
            user        => $ncUser,
            pwd         => $ncPass,
            callback    => \&FHEM::backup::ncUploadCb,
    };


Wenn ich nun folgendes mit $ncURI mache

my $ncURI =  'https://cloud.cooltux.net/remote.php/dav/files/marko/FHEM-Backup/FHEM-'.$dateTime.'.tar.gz'

Es läuft super und ich bekomme verkürzt verbose 5 so

2020.06.16 13:44:20.998 4: IP: cloud.cooltux.net -> 192.168.240.241
2020.06.16 13:44:21.010 5: HttpUtils request header:
PUT /remote.php/dav/files/marko/FHEM-Backup/FHEM-20200616_134411.tar.gz HTTP/1.0
Host: cloud.cooltux.net
User-Agent: fhem
Accept-Encoding: gzip,deflate
Authorization: Basic bWFya28lkdhfkjdhfjkdhfkjdhfkjdhfMtSmZUUzM=
Content-Length: 33557065
Content-Type: application/x-www-form-urlencoded

2020.06.16 13:44:25.301 4: https://cloud.cooltux.net/remote.php/dav/files/marko/FHEM-Backup/FHEM-20200616_134411.tar.gz: HTTP response code 201
2020.06.16 13:44:25.301 5: HttpUtils https://cloud.cooltux.net/remote.php/dav/files/marko/FHEM-Backup/FHEM-20200616_134411.tar.gz: Got data, length: 0
2020.06.16 13:44:25.302 5: HttpUtils response header:
HTTP/1.0 201 Created
date: Tue, 16 Jun 2020 11:44:21 GMT
server: Apache
referrer-policy: no-referrer
x-content-type-options: nosniff
x-download-options: noopen
x-frame-options: SAMEORIGIN
x-permitted-cross-domain-policies: none
x-robots-tag: none
x-xss-protection: 1; mode=block
set-cookie: 0d6b13b01c9d6=o6c6rj45qsfgqqh9h0qi6tie40; path=/; secure; HttpOnly
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate
pragma: no-cache
set-cookie: oc_sessionPassphrase=GcYvTBzeC%2FKlx8Rp%2FLkOjvzr8t3FGPif3WBz5R3OkQqLxtP9Nm41%2BFFafc%2BkVcyOaDeSXHfT7vGHIV5U52JHyMErGxy1JQsFls3ma%2BqYGJQgCn6NCtgIZmLkI4dPHTjx; path=/; secure; HttpOnly
content-security-policy: default-src 'none';
set-cookie: __Host-nc_sameSiteCookielax=true; path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax
set-cookie: __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=strict
set-cookie: 0d6b13b01c9d6=8fe6he9pqmuh3u6ov0f702jtvh; path=/; secure; HttpOnly
oc-fileid: 001302410d6b13b01c9d6
content-length: 0
etag: "73e79b81fa3680c6289cb73b077135c1"
oc-etag: "73e79b81fa3680c6289cb73b077135c1"
content-type: text/html; charset=UTF-8
strict-transport-security: max-age=15768000; preload
2020.06.16 13:44:25.302 1: backup Nextcloud upload succesfully



Sobald ich aber versuche andere variablen ein zu bauen

my $ncURI =  'https://'.$host.'/remote.php/dav/files/marko/FHEM-Backup/FHEM-'.$dateTime.'.tar.gz'

oder auch

my $ncURI =  'https://cloud.cooltux.net/remote.php/dav/files/'.$user.'/FHEM-Backup/FHEM-'.$dateTime.'.tar.gz'

Geht es nicht mehr und ich bekomme

2020.06.16 13:37:38.272 4: IP: cloud.cooltux.net -> 192.168.240.241
2020.06.16 13:37:38.286 5: HttpUtils request header:
PUT /remote.php/dav/files/marko/FHEM-Backup/FHEM-20200616_133729.tar.gz HTTP/1.0
Host: cloud.cooltux.net
User-Agent: fhem
Accept-Encoding: gzip,deflate
Authorization: Basic bWFdshfkjdshfkjdhfkjdshfkjdftlM04ta3E5YkMtSmZUUzM=
Content-Length: 33355471
Content-Type: application/x-www-form-urlencoded

2020.06.16 13:37:48.603 1: backup Nextcloud upload failed - Error: write to https://cloud.cooltux.net:443 timed out Data:


Mehr nicht.

Wo ist da bitte schön der Unterschied ob ich da variablen nehme oder es als festen String einsetzte. Ich meine das /FHEM-'.$dateTime.'.tar.gz am Ende geht doch auch.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

my $ncUser      = AttrVal('global','backupNCuser','');
    my $ncPass      = AttrVal('global','backupNCpass','');
    my $ncHost      = AttrVal('global','backupNChost','');
    my $ncPath      = AttrVal('global','backupNCpath','');

    HttpUtils_NonblockingGet(
        {
            url         => 'https://cloud.cooltux.net/remote.php/dav/files/marko/FHEM-Backup/FHEM-'.$dateTime.'.tar.gz',
            timeout     => 60,
            method      => 'PUT',
            data        => $cont,
            user        => $ncUser,
            pwd         => $ncPass,
            callback    => \&FHEM::backup::ncUploadCb,
        }
    );



So geht es. Die Datei wird entsprechend hoch geladen



my $ncUser      = AttrVal('global','backupNCuser','');
    my $ncPass      = AttrVal('global','backupNCpass','');
    my $ncHost      = AttrVal('global','backupNChost','');
    my $ncPath      = AttrVal('global','backupNCpath','');

    HttpUtils_NonblockingGet(
        {
            url         => 'https://cloud.cooltux.net/remote.php/dav/files/'.$ncUser.'/FHEM-Backup/FHEM-'.$dateTime.'.tar.gz',
            timeout     => 60,
            method      => 'PUT',
            data        => $cont,
            user        => $ncUser,
            pwd         => $ncPass,
            callback    => \&FHEM::backup::ncUploadCb,
        }
    );


Wenn ich es nur ein klein wenig veränder geht es schon nicht mehr. Meldung

Zitatbackup Nextcloud upload failed - Error: write to https://cloud.cooltux.net:443 timed out
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

JoWiemann

Und wenn Du mal folgendes probierst:


    my $ncUser      = AttrVal('global','backupNCuser','');
    my $ncPass      = AttrVal('global','backupNCpass','');
    my $ncHost      = AttrVal('global','backupNChost','');
    my $ncPath      = AttrVal('global','backupNCpath','');
    my $ncURL      = 'https://cloud.cooltux.net/remote.php/dav/files/'.$ncUser.'/FHEM-Backup/FHEM-'.$dateTime.'.tar.gz';

    HttpUtils_NonblockingGet(
        {
            url         => $ncURL,
            timeout     => 60,
            method      => 'PUT',
            data        => $cont,
            user        => $ncUser,
            pwd         => $ncPass,
            callback    => \&FHEM::backup::ncUploadCb,
        }
    );


Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

CoolTux

Hallo Jörg,

Das selbe Spiel. Hatte ich auch dran gedacht, sobald ich mehr in $ncURL als Variable einbaue wie das $dateTime läuft es gegen die Wand.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Zum eigentlichen Problem kann ich nichts sagen, ich fuehle mich als HttpUtils.pm Maintainer unschuldig (noch) :).

Ich schlage aber vor statt den vielen global backupNG* Attributen ein backupNG FHEM-Device anzulegen, und das backup darueber abzuwickeln.
Damit kan man gleichzeitig mehrere Backup-Profile haben, und das global Namespace waere auch nicht weiter "verseucht".
Ganz im Sinne einer Modularisierung :)

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Vermutlich nicht, solltest trotzdem darueber nachdenken :)

Sonst: in dem gezeigten Logs ist Authorization: unterschiedlich. Wenn Du die Zeile nicht verfremdet hast, dann kann es die Ursache sein. Weiterhin sind die Laengen unterschiedlich. Ich wuerde zum Debuggen die gleiche Datei nehmen.
Man koennte ja auch auf der "anderen" Seite nachschauen, was fehlt, meist landet so ei Request im Error-Log.

CoolTux

Zitat von: rudolfkoenig am 16 Juni 2020, 17:11:06
Vermutlich nicht, solltest trotzdem darueber nachdenken :)

Sonst: in dem gezeigten Logs ist Authorization: unterschiedlich. Wenn Du die Zeile nicht verfremdet hast, dann kann es die Ursache sein. Weiterhin sind die Laengen unterschiedlich. Ich wuerde zum Debuggen die gleiche Datei nehmen.
Man koennte ja auch auf der "anderen" Seite nachschauen, was fehlt, meist landet so ei Request im Error-Log.

Hallo Rudi,

Ich denke gerne darüber nach. Die Idee ist ja wirklich gut.
Danke für die Tips, die Auth habe ich verfremdet, aber ich werde in der Tat einmal schauen das ich immer mit der selben Datei teste.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Guten Morgen,

Ich habe gestern noch Rudis Vorschläge umgesetzt, leider hat das auch nicht zum Erfolg geführt. Dann viel mir ein das ich ja die ersten Tests in einer myUtils gemacht habe und habe dort mal mit den Variablen gearbeitet. Und siehe da, dort funktioniert es. Weiß der Kuckuck wieso. Es besteht also eine 50 prozentige Möglichkeit das es mit einem Modul funktioniert. Ich werde mal ein kleines Testmodul entwerfen.

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Ich will heulen.

Ich habe ein Modul gemacht und das ist wirklich schön.
Doch leider habe ich hier die selben Effekte wie mit oben beschrieben.

:'(

Es kann doch nicht sein das ich jetzt den Misst noch in eine Datei oder so fest einschreiben lassen muss. So ein Unsinn
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Christoph Morrison

Pushe doch die Sachen mal irgendwo hin, wo man sie sich anschauen kann, z.B. in Github.
Wer weiß ob irgendwas mit dem Encoding oder so kaputt ist.

Wenigstens könnte man es so selbst nachstellen.

CoolTux

https://git.cooltux.net/FHEM/mod-backupToStorage

Gibt auch ein Control File. Du brauchst aber die aktuelle 98_backup.pm welche ich vorhin in GitHub und ins SVN geladen habe.

Beschreibung gibt es noch nicht. Ist aber selbsterklärend

define NAME backupToStorage

Nach dem Anlegen des Devices die Attribute setzen und dann einfach
backup
ausführen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Ich bin etwas weiter gekommen.
Ein einfaches Logfile mit 500kb läd er hoch. Mein Backupfile mit 31,9 läd er hoch bekomme aber Fehler im Log
2020.06.17 22:45:50.262 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 653.
2020.06.17 22:45:50.262 1: stacktrace:
2020.06.17 22:45:50.262 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (653)
2020.06.17 22:45:50.262 1:     main::__ANON__                      called by fhem.pl (768)
2020.06.17 22:45:50.262 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 654.
2020.06.17 22:45:50.262 1: stacktrace:
2020.06.17 22:45:50.262 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (654)
2020.06.17 22:45:50.262 1:     main::__ANON__                      called by fhem.pl (768)
2020.06.17 22:45:50.339 1: backupToStorage (nextcloudBackup) - backup URL: https://cloud.cooltux.net/remote.php/dav/files/USER/FHEM-20200617_224324.tar.gz
2020.06.17 22:45:50.339 3: backupToStorage (nextcloudBackup) - callback: backup Nextcloud upload succesfully


Und das File ist korrupt trotz korrekter Größe.
Morgen will ich testen ob es generell an Binärfiles liegt oder an der Größe.

Und was ich nicht verstehe, das ganze als myUtils Funktion hat keine Probleme mit der Größe und läd recht schnell hoch.

@Rudi
Vielleicht findest Du einen Ansatz in der Fehlermeldung.



Nachti
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Die WARNING Zeile meint, dass syswrite es geschafft hat mehr zu schreiben, als $data lang ist.

Hypothese: $data enthaelt wide Character, und syswrite protestiert bei Dir nicht dagegen, so wie ich das bisher gewohnt war, sondern konvertiert es stillschweigend, und liefert Anzahl der geschriebenen Bytes zurueck. substr arbeitet mit (wide) Character, und die beiden Zaehlweisen sind nicht kompatibel.

Wenn diese Hypothese korrekt ist, dann muss man die Stelle finden, die auf die Idee mit dem Wide Character kam (binmode?), und die Stelle korrigieren.

CoolTux

Danke Dir Rudi für Deine Analyse und Tipps.

Habe nun schon alles probiert, sobald die Datei binär ist und egal welche Größe kommt der Fehler. Ich werde nun doch auf cURL ausweichen.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net