101

Re: AHK: Скачивание через GET/POST-запросы

Я посылаю их чтобы минимизировать вероятность получения ответа из кеша.
Хотя где-то пишут, что WinHttp и так не получает, но официального заявления я не видел.

102

Re: AHK: Скачивание через GET/POST-запросы

Вот тут написано:

A number of WinINet features are not supported in WinHTTP, including URL caching...

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

103

Re: AHK: Скачивание через GET/POST-запросы

Хотя точно неизвестно, не будет ли результат взят из кеша, если он там всё же присутствует, надо протестировать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

104 (изменено: Malcev, 2018-12-26 18:17:52)

Re: AHK: Скачивание через GET/POST-запросы

teadrinker, если используешь прокси, то точно надо использовать.
DD, как вариант вы можете начать использовать MSXML2.ServerXMLHTTP.6.0 объект.
В отличие от XMLHTTP Он происходит из WinHttpRequest, соответственно (все?) методы унаследованы тоже от него + новые возможности.
Сам я его глубоко не копал, поэтому о каких-либо возможных багах не в курсе.
https://support.microsoft.com/en-us/hel … verxmlhttp
https://docs.microsoft.com/en-us/previo … v%3dvs.85)

+ DD

105

Re: AHK: Скачивание через GET/POST-запросы

teadrinker, выше Вы приводили пример отлова ошибки —

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")

HTTP.Open("GET", "https://www.livejournal.com/__rpc_get_thread?journal=v-sidorov&itemid=310165&flat=&skip=&media=&expand_all=1&page=0", true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
status := HTTP.status
if status not in 200,304
{
   MsgBox, Статус: %status%
   Return
}
try ResponseText := HTTP.ResponseText
catch  {
   MsgBox, Error
}

но при тестировании без соединения у меня выводится стандартное окно ошибки. Как сделать, чтобы при ошибке/норме соединения показывался соответствующий MsgBox?

106

Re: AHK: Скачивание через GET/POST-запросы

Обрамляйте try->catch то место, где происходит ошибка.

107

Re: AHK: Скачивание через GET/POST-запросы

Как ни пробую, выводит стандартное окно.

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")

HTTP.Open("GET", "https://vk.com/foaf.php?id=6", true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
status := HTTP.status
if status in 200,304
{
   try {
      ResponseText := HTTP.ResponseText
      MsgBox, %ResponseText%
   }
   catch  {
      MsgBox, Error
   }
}
Else
{
   MsgBox, Error
}

108

Re: AHK: Скачивание через GET/POST-запросы

В окне обычно указана строка, которая вызывает проблему.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

109

Re: AHK: Скачивание через GET/POST-запросы

А разве у вас там ошибка?

110 (изменено: DD, 2019-01-12 17:55:18)

Re: AHK: Скачивание через GET/POST-запросы

teadrinker, вот эта строка выделяется: HTTP.WaitForResponse().
Malcev, когда отключаю соединение, выводится стандартная ошибка, а мне надо, чтобы вместо нее была моя команда.

111

Re: AHK: Скачивание через GET/POST-запросы

Её и обрамляйте в try-catch, а лучше вместе с предыдущей.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

112 (изменено: DD, 2019-01-17 07:11:58)

Re: AHK: Скачивание через GET/POST-запросы

Можно ли сделать то же самое без использования функций — то есть, вернуться из "catch" к тому, что перед этим скачивалось? На практике, в скрипте с восемью HTTP.WaitForResponse(), этот вариант не работает.


HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")

tt:
loop
{
dwn_fnc_1()
dwn_fnc_1()
{
   Global

   HTTP.Open("GET", "https://vk.com/foaf.php?id=z6", true)
   HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.Send()
   try {
      HTTP.WaitForResponse()
   }
   catch {
      sleep 1000
      tooltip, - - - 
      dwn_fnc_1()
   }
}
ResponseText := HTTP.ResponseText
tooltip, %ResponseText%
sleep 4000
}
return

113

Re: AHK: Скачивание через GET/POST-запросы

А зачем вам вообще отлавливать ошибки?
Не проще ли их отключить?

114 (изменено: DD, 2019-01-17 20:40:38)

Re: AHK: Скачивание через GET/POST-запросы

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

115

Re: AHK: Скачивание через GET/POST-запросы

Не понимаю чего вы хотите добиться.

116 (изменено: DD, 2019-01-18 03:49:31)

Re: AHK: Скачивание через GET/POST-запросы

Задача в том, чтобы когда возникает ошибка соединения в строчке HTTP.WaitForResponse() — делалась бы пауза и затем повторная попытка скачать то, что не скачалось сразу перед этим. Так это сделано в 112 сообщении — с переходом к функции. Но в больших файлах, с рядом последовательных скачиваний, этот способ не срабатывает.

117

Re: AHK: Скачивание через GET/POST-запросы

Можно в цикле проверять:

loop
{
   HTTP.Open("GET", "https://vk.com/foaf.php?id=z6", true)
   HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.Send()
   HTTP.WaitForResponse()
   if (HTTP.ResponseText != "")
      break
   sleep 1000
}

118

Re: AHK: Скачивание через GET/POST-запросы

Спасибо, заработало) —

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")

loop
{
   HTTP.Open("GET", "https://vk.com/foaf.php?id=z6", true)
   HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.Send()
   try {
      HTTP.WaitForResponse()
      break
   }
   catch {
      sleep 5000
   }
}

MsgBox % HTTP.ResponseText
return

119

Re: AHK: Скачивание через GET/POST-запросы

Теперь на следующий код, ВК выводит сообщение, что браузер IE не поддерживается. Можно ли в обход IE действовать?

post := "https://vk.com/wall-22822305_377885"

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("POST", post, true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
ResponseText := HTTP.ResponseText

MsgBox % ResponseText

120 (изменено: DD, 2019-03-11 23:05:03)

Re: AHK: Скачивание через GET/POST-запросы

121

Re: AHK: Скачивание через GET/POST-запросы

Для этого вам нужно будет понять откуда сервер получает информацию, что вы заходите с IE.

122 (изменено: DD, 2019-03-12 00:03:48)

Re: AHK: Скачивание через GET/POST-запросы

Как же это сделать? И зачем тогда была строчка «HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")»?

123

Re: AHK: Скачивание через GET/POST-запросы

Где была?

124

Re: AHK: Скачивание через GET/POST-запросы

В кодах по скачиваниям через GET/POST-запросы.

125

Re: AHK: Скачивание через GET/POST-запросы

Ого. Оказывается, если закомментировать эту строчку с "User-Agent", всё работает.

126

Re: AHK: Скачивание через GET/POST-запросы

Потому что сервер может ругаться если не отправить ему User-Agent.
Если хотите подделать под фаерфокс, посмотрите какой User-Agent отправляет фаерфокс, а можете вообще свой придумать.

+ DD

127 (изменено: DD, 2019-04-13 22:04:32)

Re: AHK: Скачивание через GET/POST-запросы

Привет. Программа логинится и скачивает Заметку с Фейсбука в мобильной версии, совершая переходы на предыдущие страницы комментариев. Но почему-то в скрипте переход происходит на ту же самую страницу, хотя в браузере они подгружаются к уже открытой в нем странице. Можно ли скриптом сымитировать поведение в браузере?

SetBatchLines -1
#SingleInstance Force

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
;-------------------------------------------------------
login    := "***********"
password := "***********"
;-------------------------------------------------------
email    := login
dest_path := A_ScriptDir
post_link := "https://mobile.facebook.com/notes/125979897479306/"

If not (LoginMode == 1)
{  ; при первом запуске один раз:
   GoSub, login
   LoginMode = 1
}

loop
{
   sleep 1000
   If A_Index = 1
      URL := post_link
   Else
      URL := URL

   HTTP.Open("GET", URL, true)
;  HTTP.SetRequestHeader("Cookie", "remixlang=0")   ; имена на русском
   HTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
   HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36")
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.Send()
   HTTP.WaitForResponse()
   ResponseText := HTTP.ResponseText

   match := "", Pos := 1
   While Pos := RegExMatch(ResponseText, "s)(<div class=""[^""]*"" data-store=""[^""]*"" id=""\d+"".*?Ещё</a></div></div></div>)",match,Pos+StrLen(match))
      all .= match1 "`n"

   URL := ""
   match := ""
   If RegExMatch(ResponseText, "s)<a[^>]* href=""([^""]*)""[^>]*>(<[^>]*>)+&nbsp;Просмотр предыдущих комментариев", match)
   {
      StringReplace match1, match1, &amp`;, &, All
      URL := match1
      URL = https://mobile.facebook.com%URL%
      msgbox % URL
   }

   if (URL = "")
      break
   If (URL~="^https://mobile.facebook.com$")
      break
}

all := all
fileappend, %all%, %dest_path% ;, UTF-8
all := ""
Return

login:
SplashImage,, y-2 x60 w40 h14 M C11 ZH0 ZW0 ZX1 ZY1 B1 
       . CTffffff CW3B5998 FM8 FS6 WM600 WS400,, login
;--------------------------------------------
;Авторизация:
;--------------------------------------------
HTTP.Open("POST", "https://mobile.facebook.com/login.php", true)
;HTTP.Open("POST", "https://mobile.facebook.com/login.php?refsrc=https%3A%2F%2Fmobile.facebook.com%2Flogin%2F&lwv=101&ref=dbl", true)
HTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send("email=" email "&pass=" password "&login=" login)
HTTP.WaitForResponse()
ResponseText := HTTP.ResponseText
ResponseText =
;--------------------------------------------
SplashImage, OFF
Return

128 (изменено: DD, 2020-02-18 16:41:22)

Re: AHK: Скачивание через GET/POST-запросы

С чего бы эта страница не скачивается?

page_link := "https://g_al_lic_a.b_n_f.fr/a_rk:/12148/bp_t6k9105580c/"
StringReplace, page_link, page_link, _,, All
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"

   HTTP.Open("GET", page_link, true)
   ;HTTP.SetRequestHeader("Cookie", cookies)
   HTTP.SetRequestHeader("DNT", "1")
   HTTP.SetRequestHeader("Accept-Language", "ru-RU")
   HTTP.SetRequestHeader("Connection", "Keep-Alive")
   HTTP.SetRequestHeader("Accept", "text/html, application/xhtml+xml, */*")
   HTTP.SetRequestHeader("User-Agent", User_Agent)
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.Send()
   HTTP.WaitForResponse()
   RTxt := HTTP.ResponseText
msgbox % RTxt

129 (изменено: DD, 2020-02-12 01:30:45)

Re: AHK: Скачивание через GET/POST-запросы

Может потому что в одну строку весь HTML-код?

130

Re: AHK: Скачивание через GET/POST-запросы

В каком смысле не скачивается? Пустой MsgBox?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

131

Re: AHK: Скачивание через GET/POST-запросы

Такая ошибка —

+ открыть спойлер

https://i111.fastpic.ru/thumb/2020/0212/7f/c521abd8fb3a69f0c0ce0aff0847be7f.jpeg

132

Re: AHK: Скачивание через GET/POST-запросы

Тут об этом пишут, попробую — http://forum.script-coding.com/viewtopic.php?id=11238.

133 (изменено: teadrinker, 2020-02-12 03:46:25)

Re: AHK: Скачивание через GET/POST-запросы

Где-то на оф. форуме обсуждали, можете поискать по номеру ошибки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

134 (изменено: DD, 2020-02-18 16:41:47)

Re: AHK: Скачивание через GET/POST-запросы

Только так работает:


page_link := "https://g_all_i_ca.bn_f.f_r/ar_k:/12_148/bpt6k_9105580c/"
StringReplace, page_link, page_link, _,, All
HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
;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"

   HTTP.Open("GET", page_link, 0)
   HTTP.SetRequestHeader("User-Agent", User_Agent)
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.Send()
   ;HTTP.WaitForResponse()
   msgbox % HTTP.ResponseText

135

Re: AHK: Скачивание через GET/POST-запросы

По какой причине оба запроса на winXP вызывают ошибки насчёт «WaitForResponse», «Send» и т.п.?

   XMLHTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
   HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")

   XMLHTTP.Open("GET", "https://vivaldi.nlr.ru/bx000010589/details", 0)
   XMLHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")
   XMLHTTP.SetRequestHeader("X-Requested-With", "XMLHttpRequest")
   XMLHTTP.Send()
   MsgBox % XMLHTTP.ResponseText

   HTTP.Open("GET", "https://vivaldi.nlr.ru/bx000010589/details", 1)
   HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")
   HTTP.SetRequestHeader("X-Requested-With", "XMLHttpRequest")
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.Send()
   HTTP.WaitForResponse()
   MsgBox % HTTP.ResponseText

136

Re: AHK: Скачивание через GET/POST-запросы

А зачем в 2020 году пользоваться WinXP???

137

Re: AHK: Скачивание через GET/POST-запросы

Согласен, но есть люди, которые по разным причинам ещё пользуются. Допустимо скачивание через GET/POST-запросы на XP?

138

Re: AHK: Скачивание через GET/POST-запросы

Думаю допустимы, но точно не знаю.
Я знакомство с автохотки начал с семерки.
Пересаживайте людей на десятку - избавитесь от многих танцев с бубнами.

139

Re: AHK: Скачивание через GET/POST-запросы

Затрудняюсь понять, по какому принципу из этой книги скачать какую-нибудь страницу. Вроде указываю все хедеры, куки, но ответ приходит с ошибкой:


HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
;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"

cookies := "ui=standard; VUFIND_SESSION=od9caslg428hesfidlc6fe4a41; supportOnlineTalkID=xo0W0UaclRRdAz0UVbVUhcDH7p2UuFrA; supportOnlineTalkID=xo0W0UaclRRdAz0UVbVUhcDH7p2UuFrA; s_l_p=STD9QvE5xSQpCthbBp38VrPSWfw00Z5O; s_l_p=STD9QvE5xSQpCthbBp38VrPSWfw00Z5O; supportListen=1; supportListen=1"

   HTTP.Open("Get", "https://cdn.libfl.ru/books/BJVVV/001/390/849/JPEG_HQ/00004.jpg", 0)
   HTTP.SetRequestHeader("User-Agent", User_Agent)
   HTTP.SetRequestHeader("Cookie", cookies)
   HTTP.SetRequestHeader("Accept", "image/webp,image/apng,image/*,*/*;q=0.8")
   HTTP.SetRequestHeader("Accept-Encoding", "gzip, deflate, br")
   HTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7")
   HTTP.SetRequestHeader("Connection", "keep-alive")
   HTTP.SetRequestHeader("Host", "cdn.libfl.ru")
   HTTP.SetRequestHeader("Sec-Fetch-Mode", "no-cors")
   HTTP.SetRequestHeader("Sec-Fetch-Site", "same-site")
   HTTP.SetRequestHeader("ETag", "542a70f0-bc410")
   HTTP.SetRequestHeader("Pragma", "no-cache")
   HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
   HTTP.SetRequestHeader("bookID", "BJVVV_1390849")
   HTTP.SetRequestHeader("view_mode", "HQ")
   HTTP.Send()
   msgbox % HTTP.ResponseText

140

Re: AHK: Скачивание через GET/POST-запросы

Достаточно указывать только Referer.

+ DD

141

Re: AHK: Скачивание через GET/POST-запросы

С чем может быть связано, что скомпилированным AHK-скриптом не качается заблоченная провайдером страница через программу AdvOR, которая пропускает трафик выбранных исполняемых программ или браузеров через свои прокси?

142

Re: AHK: Скачивание через GET/POST-запросы

А не скомпилированным скриптом качается?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

143

Re: AHK: Скачивание через GET/POST-запросы

А через какой объект качаете?
Если через Winhttp, то пробуйте через Msxml2.XMLHTTP.6.0.

144

Re: AHK: Скачивание через GET/POST-запросы

Нескомпилированные AdvOR не видит. Через оба объекта пробовал, с соответствующими настройками для обоих —

lnk := "http://btdig.com/search?q=Starry+Eyes+2014"

Loop 1 {
   if !html := GetHtml(lnk) {
      break
   }
   else
      msgbox % html
   }

GetHtml(url) {
   ;ComObjError(false)
   whr := ComObjCreate("Msxml2.XMLHTTP.6.0")
   ;whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   loop  ;CONNECT_LOOP
   {     ;CONNECT_LOOP
      whr.Open("GET", url, false)
      whr.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36")
      whr.SetRequestHeader("Pragma", "no-cache")
      whr.SetRequestHeader("Cache-Control", "no-cache, no-store")
      whr.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
      try {
         whr.Send()
         ;whr.WaitForResponse()
         Return html := whr.ResponseText
      }
      catch {
         if (html != "")
            break
         msgbox Error2
         Sleep, 2000
      }
   }     ;CONNECT_LOOP

}

145

Re: AHK: Скачивание через GET/POST-запросы

Я эту программу ставить не хочу, но если в IE указать нужное прокси, то Msxml2.XMLHTTP.6.0 будет также использовать его.
А для WinHttp его нужно прописывать в коде.

+ DD

146

Re: AHK: Скачивание через GET/POST-запросы

А-а, спасибо. Программу вроде можно и сразу запускать, без установки. Хороша тем, что в ней списки проксей, которые автоматически перебираются, в зависимости от отклика.

147

Re: AHK: Скачивание через GET/POST-запросы

Оказалось, что AdvOR тоже надо параллельно запускать — прописывать прокси из него в IE и ещё в открываемых ссылках менять HTTPS на HTTP.

148

Re: AHK: Скачивание через GET/POST-запросы

Но с чем связано, что не меняется IP?

149

Re: AHK: Скачивание через GET/POST-запросы

DD пишет:

Хороша тем, что в ней списки проксей, которые автоматически перебираются, в зависимости от отклика.

У меня платный сервис VPN.
AdvOR настраивать надо как-то так:
https://www.youtube.com/watch?v=IOP6q2hS0ng

150 (изменено: DD, 2020-08-28 23:23:33)

Re: AHK: Скачивание через GET/POST-запросы

С чем связано, что в коде страницы из браузера виден список guid всех страниц книги —

new Array("7BFD1A77-F1C8-5F1C-9A02-2B8DC22D527D","939037C6-6D78-E8B1-AFA6-61DDC68D35AA","97B9F3D7-7630-2202-46ED-3021C894C7AF","CD9F3D13-607D-60B1-842A-92991B8F9698","957585EB-AA40-FB0F-9A4F-8D932B7D57CA"
...

Но если скачивать страницу следующим скриптом, с указанием всех хедеров, то списка guid на ней нет? —


HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
;HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")

   HTTP.Open("GET", "http://arran.ru/bookreader/publication.php?guid=65A604C7-7FBD-4626-B8ED-9DCD463ACAF6&ida=1&kod=9#page/1/mode/1up", 0)
   HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")

   HTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
   HTTP.SetRequestHeader("Connection", "Keep-Alive")
   HTTP.SetRequestHeader("Content-Type", "text/html; charset=UTF-8")
   HTTP.SetRequestHeader("Date", "Fri, 28 Aug 2020 12:39:28 GMT")
   HTTP.SetRequestHeader("Keep-Alive", "timeout=5, max=100")
   HTTP.SetRequestHeader("Server", "Apache/2.4.6 (CentOS) mod_auth_gssapi/1.3.1 mod_auth_kerb/5.4 PHP/7.4.1")
   HTTP.SetRequestHeader("Transfer-Encoding", "chunked")
   HTTP.SetRequestHeader("X-DNS-Prefetch-Control", "off")
   HTTP.SetRequestHeader("X-Powered-By", "PHP/7.4.1")
   HTTP.SetRequestHeader("Accept-Encoding", "gzip, deflate")
   HTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7")
   HTTP.SetRequestHeader("Cache-Control", "max-age=0")
   HTTP.SetRequestHeader("Connection", "keep-alive")
   HTTP.SetRequestHeader("Cookie", "has_js=1")
   HTTP.SetRequestHeader("DNT", "1")
   HTTP.SetRequestHeader("Host", "arran.ru")
   HTTP.SetRequestHeader("Referer", "http://arran.ru/bookreader/publication.php?guid=65A604C7-7FBD-4626-B8ED-9DCD463ACAF6&ida=1&kod=9")
   HTTP.SetRequestHeader("Upgrade-Insecure-Requests", "1")
   HTTP.SetRequestHeader("guid", "65A604C7-7FBD-4626-B8ED-9DCD463ACAF6")
   HTTP.SetRequestHeader("ida", "1")
   HTTP.SetRequestHeader("kod", "9")
   HTTP.Send()
   ;HTTP.WaitForResponse()
   RTxt := HTTP.ResponseText

msgbox, % RTxt
FileAppend, %RTxt%, %A_desktop%\======.html, UTF-8

151

Re: AHK: Скачивание через GET/POST-запросы

Оказывается, в ссылке не должно было быть "#page/1/mode/1up".

152

Re: AHK: Скачивание через GET/POST-запросы

Как настроить этот код на постоянное скачивание, пока не перестанет приходить фрагмент текста с "erreur</title>"? Или может есть другой с таким функционалом?


url := "https://rapportgallica.bnf.fr/rapport/list?query=dc.XXXsource+all+'departement+Estampes+et+photographie'+and+dc.type+all+'image'+and+century+all+'18'+and+provenance+all+'bnf.fr'&entryNumber=af99c6fd1c39438ba532ab9518f827d3"
Loop 1 {
   if !html := GetHtml(url) {
      error := "Failed to load html`n" url
      break
   }
   else
      RTxt := html
}
msgbox % RTxt

GetHtml(url) {
   whr := ComObjCreate("Msxml2.XMLHTTP.6.0")
   loop  ;CONNECT_LOOP
   {     ;CONNECT_LOOP
      whr.Open("GET", url, false)
      whr.SetRequestHeader("User-Agent", User_Agent)
      whr.SetRequestHeader("Pragma", "no-cache")
      whr.SetRequestHeader("Cache-Control", "no-cache, no-store")
      whr.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")

      try {
         whr.Send()
         ;whr.WaitForResponse()
         Return html := whr.ResponseText
         ;if (HTTP.ResponseText != "")
         break
      }
      catch {
         Sleep, 2000
      }
   }     ;CONNECT_LOOP
}

153

Re: AHK: Скачивание через GET/POST-запросы

Так вроде работает:

         html := whr.ResponseText
         if InStr(html, "erreur</title>")
            continue
         Return html

154

Re: AHK: Скачивание через GET/POST-запросы

Впервые попался сайт, который не дает посмотреть запросы через браузерные инструменты разработчика —
https://i112.fastpic.ru/thumb/2020/0923/08/_3f973f039dcf0330a7c66b2ad7d20c08.jpeg
Как узнать запросы?

155

Re: AHK: Скачивание через GET/POST-запросы

Перехватывайте через другой броузер.

156

Re: AHK: Скачивание через GET/POST-запросы

Смотрел в старых и в новых, но видимо какие-то особенности есть у этого инструмента разработчика, что его опознают на странице.

157

Re: AHK: Скачивание через GET/POST-запросы

Ну и что показывает хром?

158

Re: AHK: Скачивание через GET/POST-запросы

То же самое, и страница не загружается.

159

Re: AHK: Скачивание через GET/POST-запросы

Смотрите тогда через fiddler.

+ DD

160

Re: AHK: Скачивание через GET/POST-запросы

Следующий код скачивает фрагменты картинок, с возрастающим вторым числом: 0_0.jpg, 0_1.jpg, 0_2.jpg — пока содержимое не будет картинкой (до 0_28.jpg). Как после скачивания увеличить первое число, обнулить второе и продолжить загрузку файлов 1_0.jpg, 1_1.jpg, 1_2.jpg (до 1_28.jpg) — и т.д.?

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"
start := 0

while (value := start + (A_Index - 1)*1) <= 9999999
{
   loop  ;CONNECT_LOOP
   {     ;CONNECT_LOOP
      HTTP.Open("GET", "http://www.bl.uk/manuscripts/Proxy.ashx?view=yates_thompson_ms_36_f001r_files/13/0_" value ".jpg", true)
      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()
         Body := HTTP.ResponseBody
         RTxt := HTTP.ResponseText

         ;If InStr(RTxt, "NoImage.jpg - The remote server returned an error")
         If !InStr(RTxt, "ÿØÿà")
            break

         pData := NumGet(ComObjValue(Body), A_PtrSize = 8? 16:12, "ptr")
         File := FileOpen(A_ScriptDir "\" page_code "\0_" value ".jpg", "w")
         File.RawWrite(pData + 0, Body.MaxIndex() + 1)
         File.Close()

         break
      }
      catch {
         Sleep, 5000
      }
   }     ;CONNECT_LOOP
} ;while

161

Re: AHK: Скачивание через GET/POST-запросы

А как этот вопрос связан с названием темы "Скачивание через GET/POST-запросы"?

162

Re: AHK: Скачивание через GET/POST-запросы

Это же скачивание через GET-запрос.

163

Re: AHK: Скачивание через GET/POST-запросы

Но вопрос-то ваш связан не с этим.
Вы же спрашиваете про обнуление переменных.

164

Re: AHK: Скачивание через GET/POST-запросы

Просто обнулить я бы мог, но надо увязать это со скачиванием). Согласен, можно было бы сузить название темы.

165

Re: AHK: Скачивание через GET/POST-запросы

Возможно ли скачать страницу, чтобы отработали js-сценарии, как в браузере? Ниже код скачивает страницу и выводит её фрагмент, в котором js-сценарий в браузере заменяет переменные на соответствующий им текст (что видно в инструментах разработчика). Как добиться того же через скрипт?

HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
HTTP.Open("GET", "https://gallica.bnf.fr/ark:/12148/btv1b8449039t/?lang=FR", 0)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
;HTTP.WaitForResponse()
RTxt := HTTP.ResponseText
RTxt := RegExReplace(RTxt, "s).*(<span id=""id_gallicarteSpan"".*?</span>).*", "$1")
msgbox % RTxt

166

Re: AHK: Скачивание через GET/POST-запросы

DD пишет:

Возможно ли скачать страницу, чтобы отработали js-сценарии, как в браузере?

Конечно, браузер это и делает!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

167

Re: AHK: Скачивание через GET/POST-запросы

Имеется в виду: скачать как в браузере — скриптом. Причём — AHK.

168

Re: AHK: Скачивание через GET/POST-запросы

Браузер примерно так же и скачивает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

169

Re: AHK: Скачивание через GET/POST-запросы

Вот вам пример для размышления:

html = <script>alert("hi")</script>

doc := ComObjCreate("htmlfile")
doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
doc.write(html)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

170

Re: AHK: Скачивание через GET/POST-запросы

А как этот пример применить к тому, что я приводил?

171

Re: AHK: Скачивание через GET/POST-запросы

Немного пошевелить мозгами.

172 (изменено: DD, 2021-01-21 20:54:00)

Re: AHK: Скачивание через GET/POST-запросы

Вот подставляю HTML-код с того сайта вместо <script>alert("hi")</script> — ничего не даёт:


html := RTxt
doc := ComObjCreate("htmlfile")
doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
doc.write(html)

html := RegExReplace(html, "s).*(<span id=""id_gallicarteSpan"".*?</span>).*", "$1")
msgbox % html

173

Re: AHK: Скачивание через GET/POST-запросы

Во-первых я не знаю зачем teadrinker использует допотопный IE9.
Я бы 'эмулировал через edge.

doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=Edge"">")

Во-вторых вы в панеле разработчика разве через регулярку получаете нужные вам данные?
Ну или даже если хотите получать через регулярку, то вам надо сначала подождать пока они все загрузятся, после чего получить outerhtml документа в переменную и после чего ее уже парсить регуляркой.

174

Re: AHK: Скачивание через GET/POST-запросы

По примеру teadrinker'а с выводом alert мне казалось, что после строки "doc.write(html)" — HTML-код уже сформирован.

Как подождать, чтобы они загрузились и получить outerhtml?

175

Re: AHK: Скачивание через GET/POST-запросы

Так же как и в автоматизации IE.
Пользуйтесь поиском.

176

Re: AHK: Скачивание через GET/POST-запросы

Так тоже не работает:

html := RTxt
doc := ComObjCreate("htmlfile")
doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=Edge"">")
doc.write(html)

html := doc.documentElement.outerhtml
;html := doc.document.documentElement.OuterHtml

html := RegExReplace(html, "s).*(<span id=""id_gallicarteSpan"".*?</span>).*", "$1")
msgbox % html

177

Re: AHK: Скачивание через GET/POST-запросы

document.body тоже не подходит:

html := doc.document.body.outerhtml

178

Re: AHK: Скачивание через GET/POST-запросы

Значит хтмл документа не перезаписывается.
Получайте этот элемент так же, как вы получаете его в консоле броузера.
И я не вижу, что вы ожидаете, что документ загрузился.

179

Re: AHK: Скачивание через GET/POST-запросы

Вот этой строкой

doc := ComObjCreate("htmlfile")

вы получаете объект документа - DOM.
https://www.w3schools.com/jsref/dom_obj_document.asp

180

Re: AHK: Скачивание через GET/POST-запросы

Malcev пишет:

Получайте этот элемент так же, как вы получаете его в консоле броузера.

А как я его получаю в консоле браузера?

181

Re: AHK: Скачивание через GET/POST-запросы

Посмотрел по сайту — нет примеров с ожиданием отработки сценариев на странице. Что надо добавить?

url := "https://gallica.bnf.fr/ark:/12148/btv1b8449039t/?lang=FR"
if !html := GetHtml(url) {
   MsgBox, Failed to get HTML
   ExitApp
}
Doc :=  DocumentFromHtml(html)
elem := Doc.GetElementById("id_gallicarteSpan")
msgbox % elem

GetHtml(url) {
   whr := ComObjCreate("Msxml2.XMLHTTP.6.0")
   whr.Open("GET", url, false)
   whr.SetRequestHeader("Pragma", "no-cache")
   whr.SetRequestHeader("Cache-Control", "no-cache, no-store")
   whr.Send()
   Return html := whr.ResponseText
}

DocumentFromHtml(html) {
   doc := ComObjCreate("htmlfile")
   doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
   doc.write(html)
   Return doc
}

182

Re: AHK: Скачивание через GET/POST-запросы

По ссылке же все написано.
https://www.w3schools.com/jsref/met_doc … lector.asp

183

Re: AHK: Скачивание через GET/POST-запросы

То есть, вместо этого

elem := Doc.GetElementById("id_gallicarteSpan")

должен быть такой формат?

document.querySelector("p.example");

184

Re: AHK: Скачивание через GET/POST-запросы

Ищите на форуме.
Об этом говорилось уже много раз.

185

Re: AHK: Скачивание через GET/POST-запросы

Посмотрел по сайту — нет примеров с ожиданием отработки сценариев на странице. Что надо добавить?

https://www.w3schools.com/jsref/prop_doc_readystate.asp

186

Re: AHK: Скачивание через GET/POST-запросы

Применяю, тоже не срабатывает:

while Doc.readystate <> 4 
{
continue 
}

187

Re: AHK: Скачивание через GET/POST-запросы

Malcev, кстати, тот случай, когда с IE=edge не работает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

188 (изменено: DD, 2021-01-21 23:37:05)

Re: AHK: Скачивание через GET/POST-запросы

Что не так делаю?

url := "https://gallica.bnf.fr/ark:/12148/btv1b8449039t/?lang=FR"
req := ComObjCreate("MSXML2.XMLHTTP.6.0")
req.Open("GET", url, 0)
req.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")
req.SetRequestHeader("Pragma", "no-cache")
req.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
req.send()
html := req.ResponseText

while (req.ReadyState != 4)
 Continue

req := ComObjCreate("htmlfile")
req.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
req.write(html)

html := req.body.outerhtml
msgbox % html
;html := req.doc.getElementById("id_gallicarteSpan")
;html := req.document.querySelector("#id_gallicarteSpan")
html := RegExReplace(html, "s).*(<span id=""id_gallicarteSpan"".*?</span>).*", "$1")
msgbox % html

189

Re: AHK: Скачивание через GET/POST-запросы

Для начала поясните, каков сакральный смысл создания переменной RTxt, если она потом не используется.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

190

Re: AHK: Скачивание через GET/POST-запросы

Она вроде передаётся в переменную html —

html := RTxt

191

Re: AHK: Скачивание через GET/POST-запросы

А в чём сакральный смысл подобной передачи?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

192

Re: AHK: Скачивание через GET/POST-запросы

Это когда я различные фрагменты кодов применял во время тестов, мне так проще было. Особого смысла не вкладывал).

193

Re: AHK: Скачивание через GET/POST-запросы

Ну вот и вложите, пишите код со смыслом, тогда и вопросы начнут сами собой отпадать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

194

Re: AHK: Скачивание через GET/POST-запросы

А из существенного что там не так?

195

Re: AHK: Скачивание через GET/POST-запросы

Давайте сначала исправим уже найденные недостатки. И напрасно вы путаницу с переменными считаете несущественной.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

196

Re: AHK: Скачивание через GET/POST-запросы

Исправил.

197

Re: AHK: Скачивание через GET/POST-запросы

DD пишет:
while (req.ReadyState != 4)
 Continue

А какой смысл в этой части?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

198

Re: AHK: Скачивание через GET/POST-запросы

Вроде, это ожидание полной загрузки страницы, который я подсмотрел в разных кодах. Был ещё такой вариант:

while req.readystate <> 4

199

Re: AHK: Скачивание через GET/POST-запросы

Полной загрузки куда? Ведь ответ вы уже получили строкой ранее в переменную html. Думаете, её содержание должно каким-то чудесным образом измениться?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

200

Re: AHK: Скачивание через GET/POST-запросы

В смысле — полной загрузки, вместе с ява-сценариями, на необходимости чего Malcev настаивал.