Page 1 of 1

Fail404 option with hurl 1.2

Posted: Tue Apr 05, 2022 8:38 pm
by amyren
After updating the hurl plugin from 1.1 to 1.2 I get a problem with one of my programs.

Here is the command used to get a file

Code: Select all

 DownloadFile(fil_dl2$, {File = deltakerfil2$, Fail404 = True, Adapter = "hurl"})
In this case the file does not (yet) exist on the server, and should not be downloaded.
Later in the script I do check for the filesize, and if the filesize is bigger than 1 the script will continue reading the file into a table.

Code: Select all

OpenFile(1, deltakerfil2$, #MODE_READ)
If FileLength(1) > 1
deltakerliste2 = ReadTable(1, {Adapter = "default"})
After updating to hurl 1.2 this will cause the program refer to the line with the readtable command and quit with the message: "Error deserializing item!"
When using hurl 1.1 the filesize will be below 1 and the readtable command will not be executed.

It might seem that with hurl 1.2 the Fail404 option is ignored in this case, and the file will get some unwanted content anyway.

Re: Fail404 option with hurl 1.2

Posted: Wed Apr 06, 2022 4:48 pm
by amyren
Realize my post probably should have been posted in the plugin section.

Anyway, here is a better example code to see what happens when you try to download from a URL that is not existing.

Code: Select all

@REQUIRE "hurl"
DownloadFile("https://google.com/nothing", {File = "test.txt", Fail404 = True, Adapter = "hurl"})
Using hurl 1.2, The code below will download a file test.txt, containing the 404 html code.
hurl 1.1 will not doenload anything, and instead give you the expected error code:
"Error in line 2 (dwn404.hws): File /nothing not found on this server!"

Re: Fail404 option with hurl 1.2

Posted: Thu Apr 07, 2022 5:48 pm
by airsoftsoftwair
Right, looks like a bug, will be fixed.

Re: Fail404 option with hurl 1.2

Posted: Sat Apr 16, 2022 11:03 pm
by airsoftsoftwair

Code: Select all

- Fix: The "Fail404" tag was ignored by hURL 

Re: Fail404 option with hurl 1.2

Posted: Thu Mar 09, 2023 12:13 pm
by amyren
You did apply the fix almost a year ago, is there going to be a hurl update soon?

Re: Fail404 option with hurl 1.2

Posted: Fri Mar 10, 2023 9:12 pm
by airsoftsoftwair
Will take some more time because it will have some major changes like supporting openssl3.library on MorphOS as well as AmiSSL 5 on 68k/OS4 and AmiSSL 4 on AROS.

Re: Fail404 option with hurl 1.2

Posted: Sat Mar 11, 2023 11:42 am
by amyren
Thanks for explaining the situation.
While waiting for an update, what workaround could you recommend?
The easiest workaround is perhaps to revert to hurl1.1, but is there a way to get around it using 1.2?

Here is an example part of my code that suffers from this bug, the code returned will be 0 with hurl1.2 so it will continue and eventually quit without any error message when it starts processing the file

Code: Select all

		DownloadFile(file_url$, {File = myfile$, Fail404 = True, Adapter = "hurl"})
		code=GetLastError()
		If code<>0
			SystemRequest("File not found", "Cause: File does not exist,\nor network error","OK")
		Else		
			If Exists(myfile$)
					moai.DoMethod("lv2", "clear")
					OpenFile(1, myfile$, #MODE_READ)
							list2 = ReadTable(1, {Adapter = "default"})
							For i = 0 To ListItems(list2)-1
								var1$ = list2[i][0]
								var2$ = list2[i][1]
								var3$ = list2[i][2]
								moai.DoMethod("lv2", "insert", "bottom", var1$, var2$, var3$)
							Next
					CloseFile(1)
			EndIf	
Here is a MWE to show that the error code will be different using hurl1.2

Code: Select all

@REQUIRE "hurl"
ExitOnError(False)
DownloadFile("https://google.com/mytest.dat", {Fail404 = True, Adapter = "hurl"})
code=GetLastError()
SystemRequest("Display code", code,"OK")
WaitLeftMouse

Re: Fail404 option with hurl 1.2

Posted: Sat Mar 11, 2023 12:29 pm
by jPV
You shouldn't run your script with ExitOnError() disabled all the time, at least unless you have your own error function with RaiseOnError(). When you disable ExitOnError() you don't catch other fails as you experienced, which can lead to very random behaviour. So you should only disable the error handling for a single command or so.

Either use:

Code: Select all

		ExitOnError(False)
		DownloadFile(file_url$, {File = myfile$, Fail404 = True, Adapter = "hurl"})
		code=GetLastError()
		ExitOnError(True)
Or in a shorter way:

Code: Select all

		code = ?DownloadFile(file_url$, {File = myfile$, Fail404 = True, Adapter = "hurl"})
Then for a workaround you could check if ReadTable() fails, for example like this:

Code: Select all

code, list2 = ?ReadTable(1, {Adapter = "default"})
And not continuing on the For loop if that fails.

BTW. as a reminder, if you don't use these variables anywhere else, remember to declare them Local to avoid mess elsewhere, to save some memory, and to make the script faster :)

Re: Fail404 option with hurl 1.2

Posted: Sun Mar 12, 2023 6:55 pm
by amyren
jPV wrote: Sat Mar 11, 2023 12:29 pm You shouldn't run your script with ExitOnError() disabled all the time, at least unless you have your own error function with RaiseOnError().
Or in a shorter way:

Code: Select all

		code = ?DownloadFile(file_url$, {File = myfile$, Fail404 = True, Adapter = "hurl"})
Thanks. That was a better way, omitting the ExitOnError thing althogether.
Then for a workaround you could check if ReadTable() fails, for example like this:

Code: Select all

code, list2 = ?ReadTable(1, {Adapter = "default"})
And not continuing on the For loop if that fails.
Thanks again, I have applied this now in my code.

I had another file that was just a textfile, so I could not use Readtable for it.
That I resolved like this to avoid to process the file in case it is a html file:

Code: Select all

OpenFile(1, premieringfil$)
	Local tmp$ = ReadString(1, 9)
CloseFile(1)
If tmp$ = "<!DOCTYPE"
...etc