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
Skype dmitry_fiveg

103

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

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

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

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
Skype dmitry_fiveg

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
Skype dmitry_fiveg
+ 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