Well, the easiest solution would be to just use curl. But M::U is a powerful tool I find myself using it more and more and I would like to better understand such tools. It looks great but if it has some severe shortcomings I want to know before doing lots of mission critical stuff with it.
But thanks for your suggestion. It is always good to know further options. -Michael Am Donnerstag, 14. Mai 2020 13:47:41 UTC+2 schrieb Felipe Gasper: > > FWIW, you can use libcurl with Mojo via Net::Curl::Promiser::Mojo. That > may be your easiest solution? > > -FG > > On May 14, 2020, at 07:38, 'Michael Lackhoff' via Mojolicious < > mojol...@googlegroups.com <javascript:>> wrote: > > > > Am 14.05.2020 um 05:08 schrieb Stefan Adams: > > > I'm certain you'll be able to accomplish this with M::UA. Can you share > > Just to reduce complexity I changed everything to plain HTTP, so no SSL, > keys or certificates. > > > > what the HTML error produced is? > > It is not really a normal error page, just a page from the UI. The most > relevant lines are these: > <p class="ErrorMsg">Invalid variable name.</p> > <p>Wiederholen Sie das Update oder starten Sie die FRITZ!Box neu.</p> > [German for: repeat the update(sic! I wanted to backup the box, not > update) or restart your FRITZ!Box] > > > > Can you share the output that you are comparing that you are noticing is > > so> similar between curl and M::UA? You're using -v for curl. Also set the> > > MOJO_CLIENT_DEBUG env variable to 1. > > Here is what curl gives (with --trace-ascii): > => Send header, 200 bytes (0xc8) > 0000: POST /cgi-bin/firmwarecfg HTTP/1.1 > 0024: Host: fritz.box > 0035: User-Agent: curl/7.58.0 > 004e: Accept: */* > 005b: Content-Length: 370 > 0070: Content-Type: multipart/form-data; boundary=-------------------- > 00b0: ----565a580ebeb0c567 > 00c6: > => Send data, 370 bytes (0x172) > 0000: --------------------------565a580ebeb0c567 > 002c: Content-Disposition: form-data; name="sid" > 0058: > 005a: 4e240384c30c909d > 006c: --------------------------565a580ebeb0c567 > 0098: Content-Disposition: form-data; name="ImportExportPassword" > 00d5: > 00d7: backup > 00df: --------------------------565a580ebeb0c567 > 010b: Content-Disposition: form-data; name="ConfigExport" > 0140: > 0142: > 0144: --------------------------565a580ebeb0c567-- > <= Recv header, 17 bytes (0x11) > 0000: HTTP/1.1 200 OK > > > > > See how it works comparing curl to:> > $ env MOJO_CLIENT_DEBUG=1 mojo > > get -v -M POST -f sid=$SID -f> ImportExportPassword=$BAKPWD -f > > ConfigExport= http> ://fritz.box/cgi-bin/firmwarecfg > > <http://fritz.box/cgi-bin/firmwarecfg> > > <http://fritz.box/cgi-bin/firmwarecfg> > > The empty ConfigExport parameter gets lost with this command and the > Content-Type is different: > > -- Blocking request (http://fritz.box/cgi-bin/firmwarecfg) > -- Connect 7c84d2d7396d9d2ff9571982f73240cb (http://fritz.box:80) > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > POST /cgi-bin/firmwarecfg HTTP/1.1\x0d > Content-Length: 48\x0d > User-Agent: Mojolicious (Perl)\x0d > Accept-Encoding: gzip\x0d > Content-Type: application/x-www-form-urlencoded\x0d > Host: fritz.box\x0d > \x0d > ImportExportPassword=backup&sid=4e240384c30c909d > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > > -- Client <<< Server (http://fritz.box/cgi-bin/firmwarecfg) > HTTP/1.1 200 OK\x0d > > > > With DEBUG on and my code (s. my original message and below) I get this: > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > POST /cgi-bin/firmwarecfg HTTP/1.1\x0d > Accept-Encoding: gzip, deflate\x0d > Content-Type: multipart/form-data; boundary=tyUPX\x0d > Accept: */*\x0d > Host: fritz.box\x0d > Content-Length: 230\x0d > User-Agent: Mojolicious (Perl)\x0d > \x0d > --tyUPX\x0d > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > Content-Disposition: form-data; name="ConfigExport"\x0d > \x0d > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > \x0d > --tyUPX\x0d > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > Content-Disposition: form-data; name="ImportExportPassword"\x0d > \x0d > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > backup > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > \x0d > --tyUPX\x0d > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > Content-Disposition: form-data; name="sid"\x0d > \x0d > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > 33cb272bcd34940b > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > \x0d > --tyUPX--\x0d > > -- Client >>> Server (http://fritz.box/cgi-bin/firmwarecfg) > > -- Client <<< Server (http://fritz.box/cgi-bin/firmwarecfg) > HTTP/1.1 200 OK\x0d > > which for me looks very much the same as the curl version but as I said, > curl gives the backup file whereas M::U just gives the HTML page back, > indicating that something went wrong. > I can only spot very minor differences that is why I am running out of > ideas: > - the boundary used by M::U is quite short > - the form parameters are not in the same order > - Accept-Encoding header (is also sent from Firefox where it works) > - the different SID is normal (my script always makes a fresch login) > > Looks very strange to me > -Michael > > > > On Wed, May 13, 2020, 4:56 PM 'Michael Lackhoff' via Mojolicious <> > > mojol...@googlegroups.com <javascript:>> wrote:> > > >> I had quite a bit of success recently using Mojo::UserAgent so I tried > >> to>> replace a curl command to do a backup of my Fritz.box router with > >> M::U.>>>> Here is the curl command:>> curl -s -k -o $OUT --form sid=$SID > >> --form ImportExportPassword=$BAKPWD \>> --form ConfigExport= > >> http://fritz.box/cgi-bin/firmwarecfg>>>> It should be equivalent to this > >> M::U request:>>>> my $tx = $ua->build_tx(>> POST => > >> 'http://fritz.box/cgi-bin/firmwarecfg' =>>> {>> > >> 'Accept' => '*/*',>> 'Content-Type' => > >> 'multipart/form-data',>> } => form => {>> sid > >> => $SID,>> ImportExportPassword => $BAKPWD,>> > >> ConfigExport => '',>> }>> );>>>> # for debugging:>> print > >> $tx->req->to_string;>>>> $tx = $ua->start($tx);>> > >> $tx->res->save_to($OUT);>>>> As far as I can tell both the headers and the > >> POST body is very much the>> same (except the boundary value to separate > >> the form fields) but to my>> surprise the curl command works ($OUT is the > >> backup file) but with the M::U>> version $OUT consists of some HTML output > >> indicating an error.>>>> If I could see a difference I could try to better > >> adjust my script but as>> I said, they look very much the same (I compared > >> it with the -v and>> --trace-ascii output of curl), so I run out of ideas > >> what could trigger the>> differnt response of my Fritz.box.>> Any ideas? > >> At the moment I just solve it by using the curl command with>> "system" > >> but I would prefer a Perl-only solution and what is even more>> important > >> to me: I want to understand what is going on here.>>>> -Michael>>>> -->> > >> You received this message because you are subscribed to the Google > >> Groups>> "Mojolicious" group.>> To unsubscribe from this group and stop > >> receiving emails from it, send an>> email to mojol...@googlegroups.com > >> <javascript:>.>> To view this discussion on the web visit>> > >> https://groups.google.com/d/msgid/mojolicious/14df452c-e7a4-4b7c-90a2-9e1f5e15becc%40googlegroups.com>> > >> > >> <https://groups.google.com/d/msgid/mojolicious/14df452c-e7a4-4b7c-90a2-9e1f5e15becc%40googlegroups.com?utm_medium=email&utm_source=footer> > >> > >> <https://groups.google.com/d/msgid/mojolicious/14df452c-e7a4-4b7c-90a2-9e1f5e15becc%40googlegroups.com?utm_medium=email&utm_source=footer>>> > >> .>> > > > > > -- > You received this message because you are subscribed to the Google Groups > "Mojolicious" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to mojol...@googlegroups.com <javascript:>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/mojolicious/6bd73f2c-36ba-4a21-992d-b699fae6f158%40googlegroups.com > > <https://groups.google.com/d/msgid/mojolicious/6bd73f2c-36ba-4a21-992d-b699fae6f158%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/mojolicious/03a573c0-5df4-448c-9256-bb851abf7285%40googlegroups.com.