1 (изменено: john_dease, 2023-03-13 00:10:27)

Тема: AHK: WinHTTPRequest

Привет! По какой причине страница с содержимым Ютуб-канала не скачивается, хотя указаны все заголовки запроса? В браузере ссылка открывается, как JSON.

*Сайт Piped — это веб-фронтенд для сайта YouTube, который позволяет смотреть видео без подключения к серверам Google и иметь подписки на каналы без учетной записи компании.

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

WinHTTP.Open("GET", "https://pipedapi.kavin.rocks/channel/UC5OrDvL9DscpcAstz7JnQGA", 1)
WinHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
WinHTTP.SetRequestHeader("path", "https://pipedapi.kavin.rocks/channel/UC5OrDvL9DscpcAstz7JnQGA")
WinHTTP.SetRequestHeader("authority", "pipedapi.kavin.rocks")
WinHTTP.SetRequestHeader("scheme", "https")
WinHTTP.SetRequestHeader("accept", "*/*")
WinHTTP.SetRequestHeader("origin", "https://piped.video")
WinHTTP.SetRequestHeader("sec-fetch-site", "cross-site")
WinHTTP.SetRequestHeader("sec-fetch-mode", "cors")
WinHTTP.SetRequestHeader("sec-fetch-dest", "empty")
WinHTTP.SetRequestHeader("referer", "https://pipedapi.kavin.rocks")
;WinHTTP.SetRequestHeader("accept-encoding", "gzip, deflate, br")
WinHTTP.SetRequestHeader("accept-language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7")
;WinHTTP.SetRequestHeader("if-modified-since", "Sun, 12 Mar 2023 19:06:57 GMT")

WinHTTP.SetRequestHeader("Content-Type", "application/json")
WinHTTP.Send()
WinHTTP.WaitForResponse()
MsgBox % WinHTTP.ResponseText

2

Re: AHK: WinHTTPRequest

Может, так:

url := "https://pipedapi.kavin.rocks/channel/UC5OrDvL9DscpcAstz7JnQGA"
Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
Whr.Open("GET", url, true)
Whr.Send()
Whr.WaitForResponse()
MsgBox % Whr.ResponseText

?

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

3

Re: AHK: WinHTTPRequest

Спасибо! А как вы поняли, что все заголовки надо убрать?

4 (изменено: Malcev, 2023-03-13 11:40:44)

Re: AHK: WinHTTPRequest

Необязательно все заголовки надо убрать.
Просто там тупой cloudflare по-тупому блокирует ботов (определяя chrome из User-Agent).
Например заменив на этот заголовок уже прокатит:

WinHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom/86.0.4240.198 Safari/537.36")

5

Re: AHK: WinHTTPRequest

Malcev пишет:

Необязательно все заголовки надо убрать

А они там нужны? По опыту, если адрес ссылается на json или txt, то если не нужна авторизация, никакие заголовки не требуются.

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

6

Re: AHK: WinHTTPRequest

Думаю, что не нужны, я просто написал в чем конкретно причина на этом сайте.

7

Re: AHK: WinHTTPRequest

Не удается скачать следующую страницу - вместо файла стилей, приходит HTML-файл с ошибкой не найденной страницы. При этом на этом же сайте файл стиля, что находится уровнем выше (all-print.css) - нормально скачивается. В чем может быть причина?

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
;HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
HTTP.Open("GET", "https://www.bl.uk/manuscripts/stylesheets/screen.css", 1)
;HTTP.SetProxy(2, proxy)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 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.SetRequestHeader("cookie", "ASP.NET_SessionId=emxpj1t3wrm4rjqqaxvaezow; ")
HTTP.Send()
HTTP.WaitForResponse()
ResponseHeaders := HTTP.getAllResponseHeaders()
RTxt := HTTP.ResponseText

msgbox %ResponseHeaders%`n`n%RTxt%

8

Re: AHK: WinHTTPRequest

Закомментируйте:

HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")

9

Re: AHK: WinHTTPRequest

А почему с этой ссылкой это не проходит?

10

Re: AHK: WinHTTPRequest

Если вы хотите, чтоб я изучал каждую вашу ссылку, то только платно.

11

Re: AHK: WinHTTPRequest

Вопрос был ко всем, исключительно по желанию. Наверно, что тут уже куки надо использовать.

12

Re: AHK: WinHTTPRequest

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

13 (изменено: john_dease, 2023-05-25 20:16:52)

Re: AHK: WinHTTPRequest

Я многократно это делал, но безуспешно. К примеру, там появляются ключевые куки: "ASP.NET_SessionId=0y0avnlyw4owfowl0bjdtxrc;" - но их источник возникновения не прослеживается. Отследить я пытался и смотря список ссылок, а так же экспортировав всю загрузку ("Export HAR...") и просматривая строчки с этим куки.

14

Re: AHK: WinHTTPRequest

Изучайте внимательней запросы и ответы.
Куки посылать там ненадо.

15

Re: AHK: WinHTTPRequest

Как-то дату надо изменить, или убрать вызывающие ошибки хедеры?

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
;HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
HTTP.Open("GET", "https://www.bl.uk/manuscripts/FullDisplay.aspx?ref=burney_ms_169", 1)
;HTTP.SetProxy(2, proxy)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 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.SetRequestHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")

HTTP.SetRequestHeader("authority", "www.bl.uk")
HTTP.SetRequestHeader("method", "GET")
HTTP.SetRequestHeader("path", "https://www.bl.uk/manuscripts/FullDisplay.aspx?ref=burney_ms_169")
HTTP.SetRequestHeader("scheme", "https")
;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("cache-control", "max-age=0")
HTTP.SetRequestHeader("referer", "https://www.bl.uk")
HTTP.SetRequestHeader("sec-ch-ua", """ Not A;Brand"";v=""99"", ""Chromium"";v=""102""")
HTTP.SetRequestHeader("sec-ch-ua-mobile", "?0")
HTTP.SetRequestHeader("sec-ch-ua-platform", """Windows""")
HTTP.SetRequestHeader("sec-fetch-dest", "document")
HTTP.SetRequestHeader("sec-fetch-mode", "navigate")
HTTP.SetRequestHeader("sec-fetch-site", "none")
HTTP.SetRequestHeader("sec-fetch-user", "?1")
HTTP.SetRequestHeader("upgrade-insecure-requests", "1")

HTTP.Send()
HTTP.WaitForResponse()
ResponseHeaders := HTTP.getAllResponseHeaders()
RTxt := HTTP.ResponseText

msgbox %ResponseHeaders%`n`n%RTxt%

16

Re: AHK: WinHTTPRequest

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

17

Re: AHK: WinHTTPRequest

Если предварительно почистить из браузера куки этого сайта, то в самый первый раз там идут такие 3 гет-запроса


https://www.bl.uk/manuscripts/SetupFullDisplayHandler.ashx?ref=burney_ms_169
http://www.bl.uk/manuscripts/FullDisplay.aspx?ref=burney_ms_169
https://www.bl.uk/manuscripts/FullDisplay.aspx?ref=burney_ms_169

https://s1.hostingkartinok.com/uploads/thumbs/2023/05/4bd9606fae8e3e6fcbcb81e8ba026db6.png

При этом если последовательно повторить их, то так же скачивание не происходит.

18

Re: AHK: WinHTTPRequest

Вам не надо повторять 2 запрос - он http - достаточно первый и третий.
Или разрешить редирект с https на http в опциях Winhttp и посылать только третий.

19

Re: AHK: WinHTTPRequest

Пробовал с редиректом:


;Включаем редиректы
HTTP.Option(WinHttpRequestOption_EnableRedirects) := -1
;Включаем редиректы с HTTP на HTTPS
HTTP.Option(WinHttpRequestOption_EnableHttpsToHttpRedirects) := -1
;Выставляем максимальное количество автоматических редиректов
HTTP.Option(WinHttpRequestOption_MaxAutomaticRedirects) := 20

global HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1") 


HTTP.Open("GET", "https://www.bl.uk/manuscripts/FullDisplay.aspx?ref=burney_ms_169", 1)
;HTTP.SetProxy(2, proxy)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 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()
ResponseHeaders := HTTP.getAllResponseHeaders()
RTxt := HTTP.ResponseText

msgbox %ResponseHeaders%`n`n%RTxt%

И с последовательной загрузкой первой и третьей ссылки:

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

HTTP.Open("GET", "https://www.bl.uk/manuscripts/SetupFullDisplayHandler.ashx?ref=burney_ms_169", 1)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 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()


HTTP.Open("GET", "https://www.bl.uk/manuscripts/FullDisplay.aspx?ref=burney_ms_169", 1)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 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()
ResponseHeaders := HTTP.getAllResponseHeaders()
RTxt := HTTP.ResponseText
msgbox %ResponseHeaders%`n`n%RTxt%

Но оба не срабатывают.

20

Re: AHK: WinHTTPRequest

Откуда у вас этот огрызок кода?

;Включаем редиректы

Включать их не надо - они по дефалту включены.

21

Re: AHK: WinHTTPRequest

Отсюда: http://forum.script-coding.com/viewtopi … 045#p81045. Как ни странно, но с кодом по ссылке, страница скачивается.

22

Re: AHK: WinHTTPRequest

Ничего странного, так как там не огрызок.

23

Re: AHK: WinHTTPRequest

Но там же вроде то же самое, что и у меня: get-запрос, send?

24 (изменено: john_dease, 2023-05-25 23:28:46)

Re: AHK: WinHTTPRequest

При этом, если убрать этот огрызок с редиректами - там не сработает (с ссылкой для bl).

25 (изменено: Malcev, 2023-05-25 23:30:01)

Re: AHK: WinHTTPRequest

Нет, там разработчик понимал, что пишет.
А вы, подозреваю, не понимаете эту часть:

;Включаем редиректы
HTTP.Option(WinHttpRequestOption_EnableRedirects) := -1
;Включаем редиректы с HTTP на HTTPS
HTTP.Option(WinHttpRequestOption_EnableHttpsToHttpRedirects) := -1
;Выставляем максимальное количество автоматических редиректов
HTTP.Option(WinHttpRequestOption_MaxAutomaticRedirects) := 20
john_dease пишет:

При этом, если убрать этот огрызок с редиректами - там не сработает.

Там не огрызок.

26

Re: AHK: WinHTTPRequest

А если они по дефалту включены - надо ли их понимать в данном случае?

27

Re: AHK: WinHTTPRequest

В целом виде не огрызок, но после извлечения вы его так назвали.

28

Re: AHK: WinHTTPRequest

Всё что используете желательно понимать, тогда не будет однотипных вопросов - "почему не скачивается".
По дефалту включены просто редиректы, с https на http нет.
Изучайте:
https://learn.microsoft.com/en-us/windo … uestoption