1

Тема: AHK: Надёжное скачивание изображения

Есть задача надёжно качать картинку — задействовать условие, чтобы скачивание происходило только когда изображение действительно доступно. В реальном примере ссылка на изображение бывает активна только по определенным условиям (логин, включение доступа и тп), хотя наверно это относится и к любым изображениям. То есть, как скачивать с учётом разрывов соединений, сбросов логина — только когда известно, что это картинка?



HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
User_Agent := "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"

   loop  ;CONNECT_LOOP
   {     ;CONNECT_LOOP
      HTTP.Open("GET", URL, true)
      HTTP.SetRequestHeader("Referer", URL)
      ;HTTP.SetRequestHeader("Cookie", cookies)
      ;HTTP.SetRequestHeader("Cookie2", "$Version=1")
      HTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7")
      HTTP.SetRequestHeader("User-Agent", User_Agent)
      HTTP.SetRequestHeader("Pragma", "no-cache")
      HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")

      try {
         HTTP.Send()
         HTTP.WaitForResponse()
         ;!!MsgBox, % HTTP.StatusText 
         ResponseHeaders := HTTP.getAllResponseHeaders()
         Body := HTTP.ResponseBody
/*
         status := HTTP.status
         if status in 404
            break
*/
         If InStr(ResponseHeaders, "Content-Type:") and not InStr(ResponseHeaders, "image/jpeg")
            break
         pData := NumGet(ComObjValue(Body), A_PtrSize = 8? 16:12, "ptr")
         File := FileOpen(A_ScriptDir "\" page_code "\" ren, "w")
         File.RawWrite(pData + 0, Body.MaxIndex() + 1)

         break
      }
      catch {
         Sleep, 5000
      }
   }     ;CONNECT_LOOP