Internet Abbrüche abfangen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Filzfrosch
Posts: 64
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Internet Abbrüche abfangen

Post by Filzfrosch » 02 Jun 2023, 14:42

Moin,
ich habe seit einiger Zeit mit meinem Internetzugang zu kämpfen, ständig bricht die Verbindung weg. Provider weiß Bescheid findet den Fehler aber wohl nicht, ist aber auch ein ganz anderes Thema, dass bei mir aber wohl noch einige Zeit so bleiben wird ... :problem:
Jedenfalls habe ich ein Script am laufen, dass im Hintergrund in 10 Minuten Intervallen eine Internet-API abfragt und Daten holt.
Wenn nun zu dem Abruf-Zeitpunkt gerade kein Zugriff auf die API möglich ist, stürzt mein Script ab und muss dann erst mühsam beendet werden, da es auf keine Eingaben oder sonst etwas mehr reagiert. Da das Script nur im Hintergrund läuft bekomme ich es dann manchmal auch erst später mit, dass seit einiger Zeit keine Daten mehr kommen.
Den Absturz möchte ich jetzt natürlich abfangen.
Bisher war mein Anschluss so stabil das ich so eine Funktion nie eingebaut hatte.
Ideen wäre eine Art Abbruch der Abfrage nach z.B. 15 Sekunden und dann einfach schlafen legen und beim nächsten Mal neu probieren.
Oder vor dem Abruf eine Kontrolle ob überhaupt ein Internetzugriff möglich ist und solange wiederholen bis wieder Daten fließen und dann erst die Abfrage starten.
Bevor ich jetzt anfange herum zu probieren wie ich das am Besten mache (müsste auch erstmal recherchieren wie es dann gemacht wird), wie würdet ihr das lösen oder wie habt ihr es vlt. sogar schon gelöst?
Irgendwelche Ideen wie ich das galant abfange?

Gruß und Dank vorab aus Hamburch
Merry Crisis and a happy new fear

garry
Posts: 3764
Joined: 22 Dec 2013, 12:50

Re: Internet Abbrüche abfangen

Post by garry » 03 Jun 2023, 02:25

kurz eine Idee , sicher bessere Lösungen von den ahk-profis ...

Code: Select all

#persistent
url:="https://www.autohotkey.com/download/1.1/version.txt"
xx:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
xx.SetTimeouts(500,500,500,500)
;-
settimer,checkurl,9000     ;- test every 9 seconds
gosub,checkurl
return 
;-------------------------------------------------------
Checkurl:
try {
    xx.Open("GET",url)
    xx.Send()
    aac:=xx.ResponseText  
	msg=OK
} catch e {
    xxx:=e.Message
	msg=NOK
    }
if (msg="OK")
  {
  settimer,checkurl,9000
  msgbox, 262208,SUCCESS,%aac%,2                 ;- show ahk version > 1.1.36.02  for 2 seconds
  }
if (msg="NOK")
  {
  settimer,checkurl,18000
  msgbox, 262208,NO SUCCESS ERROR ,Error=Catch`n%url%`n NOT exists / OR TIMEOUT `n------------------------------------------`n%xxx%`n------------------------------------------,5
  }
return
;------------
esc::exitapp
;==================================================================

Filzfrosch
Posts: 64
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Re: Internet Abbrüche abfangen

Post by Filzfrosch » 03 Jun 2023, 09:27

Ok, danke. Da muss ich mich erstmal reinlesen und es verstehen :D
Mein Abruf der API/Json-Datei sieht folgendermaßen aus

Code: Select all

UrlDownloadToFile, %APIAdresse%, %A_SCRIPTDIR%\json\data.json
Also ich lade eine data.json herunter, aus der dann später mit FileRead und einem RegExReplace die Werte entnommen werden.
Ändert sich dadurch etwas an dem Aufbau deines Scripts?
Und ganz generell: Wie würde man denn den gestarteten Abruf der Datei (UrlDownloadToFile) stoppen können?
Also das der Befehl nach x Sekunden beendet wird?
Stehe da leider etwas auf dem Schlauch.

Deshalb hatte ich schon die Idee, vielleicht erstmal vorab einen Ping an eine (anpingbare) Adresse zu senden, wenn der nicht erfolgreich ist, solange mit einer Verzögerung von z.B. 10 Sekunden wiederholen bis wieder eine Antwort kommt. Und erst dann den UrlDownloadToFile Befehl zu starten.
Merry Crisis and a happy new fear

garry
Posts: 3764
Joined: 22 Dec 2013, 12:50

Re: Internet Abbrüche abfangen  Topic is solved

Post by garry » 03 Jun 2023, 09:53

ein kurzer Versuch mit urldownloadtofile , 3-mal, denn beendet , oder ESC drücken um skript zu beenden
Bemerkung: TRY > Befehl ausführen, wenn nicht gut > CATCH
in der Variable 'aac' ist der Textinhalt welches verarbeitet werden kann d.h. in diesem Fall wäre urldownloadtofile nicht nötig

Code: Select all

#persistent
url  :="https://www.autohotkey.com/download/1.1/version.txt"
i    :=0
Total:=3
;-
xx:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
xx.SetTimeouts(500,500,500,500)
;-
settimer,checkurl,10000     ;- test every 10 seconds
gosub,checkurl
return 
;-------------------------------------------------------
Checkurl:
name:=a_now . "_version.txt"
File:=a_desktop . "\" . name
i++
try {
    xx.Open("GET",url)
    xx.Send()
    aac:=xx.ResponseText  
	msg=OK
} catch e {
    xxx:=e.Message
	msg=NOK
    }
if (msg="OK")
  {
  settimer,checkurl,20000
  ;msgbox, 262208,SUCCESS,%aac%,2                 ;- show ahk version > 1.1.36.02  for 2 seconds
  SplashImage,,M b fs12 ctFFFF00 cwBlack x100 y100 ZW800,Download=`n%name%
  urldownloadtofile,%url%,%file%
  sleep,2000
  Splashimage,off
  }
if (msg="NOK")
  {
  settimer,checkurl,10000
  msgbox, 262208,NO SUCCESS ERROR ,Error=Catch`n%url%`n NOT exists / OR TIMEOUT `n------------------------------------------`n%xxx%`n------------------------------------------,5
  }
if (i=total)
  {
  settimer,checkurl,off
  msgbox, 262208,ENDE,Total=3 OK/NOK beendet
  exitapp
  }
return
;------------
esc::exitapp
;==================================================================

Filzfrosch
Posts: 64
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Re: Internet Abbrüche abfangen

Post by Filzfrosch » 04 Jun 2023, 11:06

Vielen Dank!
Ich werde damit jetzt mal ein wenig herum testen und es dann ins Script einbauen. Sollte dann ja stabiler laufen. :+1:
Merry Crisis and a happy new fear

Post Reply

Return to “Ich brauche Hilfe”