Я запускаю HttpWebRequest на общедоступном веб-сайте, чтобы вернуть JSon, по крайней мере, пару лет. На прошлой неделе он внезапно перестал работать и не давал ответа через этот код (он называется «Старый», потому что я использую обходной путь с помощью сценария PowerShell, но это неуклюжее решение). В конечном итоге время ожидания истекает через 100 секунд по умолчанию, но более длительный тайм-аут не исправит это.
Function CreateRequestOld(ByVal sMESUser As String, ByVal sMeeting As String, ByVal sRaceDate As String, ByVal iRaceNumber As Integer, ByVal iTrade As Integer, Optional ByVal sJuristriction As String = "VIC") As String
Dim Url As String
Dim request As HttpWebRequest = Nothing
Dim dataStream As Stream = Nothing
Dim response As HttpWebResponse = Nothing
Dim strResponseStatus As String = ""
Dim reader As StreamReader = Nothing
Dim responseFromServer As String = ""
Dim sFile As String = "C:\logs\MESRaceLog_" & sMESUser & ".txt"
Dim Util As New Utilities
Dim sMeetingCode As String
Dim RI As New RaceInfo
Dim dte As New DateClass
Dim dtRaceDate As Date
If (iTrade = 1) Then
sFile = "C:\logs\MESRaceTradeLog_" & sMESUser & ".txt"
End If
If (iTrade = 2) Then
sFile = "C:\logs\MESRaceOddsLog_" & sMESUser & ".txt"
End If
Try
sMeetingCode = RI.GetTABCouseCode(sMeeting)
If (sMeetingCode = "") Then
Util.LogMsg(sFile, "TAB CreateRequest Error no meeting code for Meeting name " & sMeeting)
Return ""
End If
dtRaceDate = dte.ConvertStringToDate(sRaceDate, "dd/mm/yyyy")
sRaceDate = dte.Get_Date_String(dtRaceDate, "yyyy-mm-dd")
Url = "https://api.beta.tab.com.au/v1/tab-info-service/racing/dates/" & sRaceDate & "/meetings/R/" & sMeetingCode & "/races/" & iRaceNumber & "?jurisdiction = " & sJuristriction
Util.LogMsg(sFile, "TAB CreateRequest URL " & Url)
request = HttpWebRequest.Create(New Uri(Url))
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
request.Method = "GET"
request.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.7"
request.AllowAutoRedirect = True
response = request.GetResponse()
strResponseStatus = CType(response, HttpWebResponse).StatusDescription
dataStream = response.GetResponseStream()
reader = New StreamReader(dataStream)
responseFromServer = reader.ReadToEnd()
reader.Close()
dataStream.Close()
response.Close()
Catch ex As Exception
Util.LogMsg(sFile, "CreateRequest Error" & vbCrLf & ex.Message)
End Try
Return responseFromServer
End Function
Однако, если я вставлю URL-адрес в браузер (в моем случае Chrome), он ответит Json, как и ожидалось.
Итак, я попробовал Postman, и он также не отвечает, если это просто URL-адрес. Однако если я скопирую скрипт Curl и использую Postman, он отреагирует правильно. Я заметил, что в сценарии Curl имеется 23 элемента заголовка запроса, тогда как в случае простого URL-адреса (того, который не работает) есть только 5 элементов заголовка.
Я подозреваю, что веб-сайт перешел на HTTP/2 и поэтому требует всех этих дополнительных элементов заголовка. Поэтому я скопировал URL-адрес как Windows Powershell из Chrome (в инструментах разработчика щелкните правой кнопкой мыши, скопируйте как Windows Powershee) и создал сценарий, который приведен ниже, и он работает хорошо и получает ответ.
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
$session.Cookies.Add((New-Object System.Net.Cookie("_cs_c", "0", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_tgpc", "d077be37-9bfe-58ce-bb34-2219fe18534c", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("s_ecid", "MCMID%7C42816005962630671342879997247751714175", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_gcl_au", "1.1.1461016396.1701314243", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("__qca", "P0-115178265-1701314243095", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_fbp", "fb.2.1701314243684.710804252", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_scid", "173c7c5f-d2aa-4407-9b6d-5eb48d7d5326", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_scid_r", "173c7c5f-d2aa-4407-9b6d-5eb48d7d5326", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_sctr", "1%7C1706792400000", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("at_check", "true", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("AMCVS_5C750C3A53DB4D070A490D4D%40AdobeOrg", "1", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_abck", "E98C9DC841935F14412438E52AEE528E~0~YAAQBcfOF59EHWuNAQAAsVHf0gvjwuRSy0ElwTKYqvAoJLQPTUBCXrzWbnUSm592eN9RKleGSHb6N1G4sOpkqms4YYyspcf+3j26XCyZ5cUO/PtysyIwLocjO/mDFZ0aQTYZIcMXSuuNycWI0uarkBykoIE5TBfeo6kPD1jD7LecoSHOPVRT/z/FC/0XUS8QcgfqHESSh7Gk6D8Dh3OBQ67qpu6GXq2enMxvn/8v0vn9u0DfH739OwrQyIfO82L11CRPswZtzXj0Wk5Qx5z9ObdAZ+eM9Edz+ts4SjQVXm585PwP9aam/xPL6Lqhov+8+htIFbaKT9O9WoemaBfthkvFk90cFfZ4tv57iPDPwT7+dIDGIcwph6wK5gsd9DS4kCpPXiOIgDcJIV4r6/tL2h8xgm+Ui+Sx~-1~-1~-1", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("bm_sz", "55EEBE064EF9FD3569F82C5AE9083857~YAAQBcfOF6FEHWuNAQAAsVHf0had2HtUmx7KB2ZnSoNh2rj59HNbyA1TAzJCjLmz8aXSPpV1Q699Pfux/9L01gXAmWItcxkttXyzNTYJBwN5/0YXC7Z5KMVxPA4YnDI+DPEUDgbo9pls/PxE86j6qFbQsHPk5mjH5trCuBl4I6lLa4we6cHSZZ2D8Rb8hNSdi3hfkgNtXDISvW35NyOo3EMgBYkb3SZL5BgjWsI6D/Bw9rpj80MRJs/NPZPHOaCvj76NQEHEr2FNclSS1j5sKa3dCeLQC3CfFtw705FlSHX+fxLCaJr0k+V3guclD9JQxD64qzawCSqOur3H8sGNdd6eRHPULHeijC+naKplTbnYgTtwUX2KdjE=~3621429~4469301", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("AKA_A2", "A", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("ak_bmsc", "F23866DFAFE8CC0C588C07C641D011C3~000000000000000000000000000000~YAAQOU5haKnFDcqNAQAAbNln0xZzvuAFiiDMoeSqPqgw/Qyd1vMSeWW1tBvtNwt1/1xz7GqrMaHlb6o/7sgtgmAm+DDYW43r4aLL0IpxZ2znjHkqMe9WUQGFW1z66zd5FWnbVJph+HPgdO38rC0bnaxlGp4EjsgLMVSp3JoveyRNFernNgur79/hEqApGaNw0wIdq+0uT1GIN7MzFitWaLYEXdbwgWmGYroXCzL4f2Jcxuz4jlsrvo+BhP36wRHKjmflq36j+D9bcg1E6QLT94auind7POTHnvh/uERvVKxGJdW6b4DpuHYiWo8s0EwK2PE2d3+7nXCH1iTxV7+2sDPmcMmqrPbGcrIH0UXR5bb7d2P64v4CgiynMUNx3AlK9JJBSm1czBQFKlMQ", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("www.tab.com.au", "179643557%7CMCIDTS%7C19777%7CMCMID%7C42816005962630671342879997247751714175%7CMCAAMLH-1709253617%7C8%7CMCAAMB-1709253617%7CRKhpRz8krg2tLO6pguXWp5olkAcUniQYPHaMWWgdJ3xzPWQmdj0y%7CMCOPTOUT-1708656017s%7CNONE%7CMCAID%7CNONE%7CMCCIDH%7C-394740951%7CvVersion%7C5.5.0", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("bm_mi", "7E78507F65544A6BEB911B6594252269~YAAQOU5haLLFDcqNAQAA1N1n0xaR8VACVmX0VDfQyabr26S83xcjsuZDySCB0Ba3KF8V7EBTrDO2I0q0LqCGVCXBIEpm4kqRUrsWAnZ2ku6pa3LWedJ/oPEPdqXXQz4MRQoqBv3xk/iKpQsEscblrzmKbEh1S+MoRjUsDv05k7V8/YypSTJlyfrhrA4XFBRJcyKThMUSgVmKmftm6lFi2Iv5X32BWk9tdClyDo1WcoR1gf3benLG+0dVsRJlJi3GhxxJh6NzUnbl5iuFh+p7VQtjevNJYtVX66OX773tSVIteUnl/rYsf5u/6dPm1F8FllaIkx0BtA==~1", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_cs_mk_aa", "0.1392149211434872_1708648818354", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("adcloud", "{%22_les_v%22:%22y%2Ctab.com.au%2C1708650618%22}", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_tguatd", "eyJzYyI6IihkaXJlY3QpIn0 = ", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_tgidts", "eyJzaCI6ImQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIiwiY2kiOiJkODhmOTQ2ZS0xNGY2LTU2MDUtODJlOS02N2FiZjA0NDQ0MzIiLCJzaSI6IjBhYzA0OGMzLTliZjgtNTBkZC04ZmZhLTQzY2U3N2ZkNGQ5MCJ9", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_tglksd", "eyJzIjoiMGFjMDQ4YzMtOWJmOC01MGRkLThmZmEtNDNjZTc3ZmQ0ZDkwIiwic3QiOjE3MDg2NDg4MTg1MTUsInNvZCI6IihkaXJlY3QpIiwic29kdCI6MTcwMTMxNDI0MjY2NSwic29kcyI6Im8iLCJzb2RzdCI6MTcwMTMxNDI0MjY2NX0 = ", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_gid", "GA1.3.286042675.1708648819", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ga", "GA1.3.1084240241.1701314243", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_tgsid", "eyJscGQiOiJ7XCJscHVcIjpcImh0dHBzOi8vd3d3LnRhYi5jb20uYXUlMkZcIixcImxwdFwiOlwiT25saW5lJTIwU3BvcnRzJTIwJTI2JTIwSG9yc2UlMjBSYWNpbmclMjBCZXR0aW5nJTIwQXVzdHJhbGlhJTIwJTdDJTIwVEFCXCIsXCJscHJcIjpcIlwifSIsInBzIjoiZjk5OWNmMDktNDlkOC00OTM3LTgyMmQtNzVkYWJhMzlhYjM1IiwicHZjIjoiMSIsInNjIjoiMGFjMDQ4YzMtOWJmOC01MGRkLThmZmEtNDNjZTc3ZmQ0ZDkwOi0xIiwiZWMiOiI0IiwicHYiOiIxIiwidGltIjoiMGFjMDQ4YzMtOWJmOC01MGRkLThmZmEtNDNjZTc3ZmQ0ZDkwOjE3MDg2NDg4MjE4MDU6LTEifQ= = ", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_cs_id", "8c885f2f-4ec7-a81f-a51d-0c7fbc4e5253.1701314242.13.1708649137.1708648818.1.1735478242634.1", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_cs_s", "4.0.0.1708650937050", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("mbox", "PC#4d529f94d644416b83c7f3f4420ea6c1.36_0#1771893939|session#e85cb33e18f1458fae30265336746b93#1708650999", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_uetsid", "1e537e60d1e411eeb9d3b9dc7b7b2ef3", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_uetvid", "fa7b46408f2e11ee94a259059b2087fb", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("bm_sv", "FA3401F77595CB3BFA48E9B3EB68D923~YAAQB1rWF90I/s+NAQAAvYR40xY/4Sg4442TcILWMORP16M+CUypxE/1Q8GoIPyAaR3Dw6QFQYepBzb6OzgAuHqjwVwgKffGPGlNSIakay0I67nwTvg22/n4RLbWrXHiKR1WUnyy0xS1ldQdlsQLEU9TbDrhJbIKxcuaoIvFSlWb13RSwFgigd6I77vhvfog4dYam2Prx93Z9S5AsP/Yt8mjF+UnQjukoloUsVSrB/tmd1rbngxGNFwKDA08xL7MVjU=~1", "/", ".tab.com.au")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ga_ZMHBYSQ22N", "GS1.1.1708648818.12.1.1708649915.60.0.0", "/", ".tab.com.au")))
Invoke-WebRequest -UseBasicParsing -Uri "https://api.beta.tab.com.au/v1/tab-info-service/racing/dates/ThisRaceDate/meetings/R/ThisRaceCode/races/999?jurisdiction=VIC" `
-WebSession $session `
-Headers @{
"authority" = "api.beta.tab.com.au"
"method" = "GET"
"path" = "/v1/tab-info-service/racing/dates/today/meetings?jurisdiction=VIC"
"scheme" = "https"
"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.7"
"accept-encoding" = "gzip, deflate, br"
"accept-language" = "en-US,en;q=0.9"
"cache-control" = "max-age=0"
"dnt" = "1"
"if-none-match" = "W/`"850d3337bda07909d530fde6a483487e`""
"sec-ch-ua" = "`"Not A(Brand`";v=`"99`", `"Google Chrome`";v=`"121`", `"Chromium`";v=`"121`""
"sec-ch-ua-mobile" = "?0"
"sec-ch-ua-platform" = "`"Windows`""
"sec-fetch-dest" = "document"
"sec-fetch-mode" = "navigate"
"sec-fetch-site" = "none"
"sec-fetch-user" = "?1"
"upgrade-insecure-requests" = "1"
} -OutFile Race.json
Мой вопрос заключается в том, как я могу украсить код HTTPWebRequest всеми этими 30 нечетными элементами, которые устанавливаются с помощью Powershell с помощью команды session.Cookies.Add внутри кода и отображаются как элементы в заголовке запроса при запуске из браузера (или как завиток сценарий в Postman).
Я попытался добавить CookieContainer в свой код, но безуспешно, но, возможно, я реализовал его неправильно. Раньше мне никогда не приходилось устанавливать файлы cookie, поэтому мои знания о том, как их реализовать, ограничены.
Мне не обязательно нужно решение в VB.Net. Я могу перейти на C#. У меня есть только VB.Net из-за некоторого устаревшего кода, и я не тратил время на его замену на C#.
Обновление 1 Теперь я могу получить этот код для получения ответа, добавив несколько заголовков, таких же, как в команде Powershell.
Теперь это мой код
'Using request As HttpWebRequest
request = HttpWebRequest.Create(New Uri(Url))
request.Pipelined = True
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
request.Method = "GET"
request.Timeout = 5000
request.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.7"
request.Headers.Add("authority", "api.beta.tab.com.au")
request.Headers.Add("method", "GET")
request.Headers.Add("scheme", "https")
request.Headers.Add("accept-encoding", "gzip, deflate, br, zstd")
request.Headers.Add("accept-language", "en-US,en;q=0.9")
request.Headers.Add("cache-control", "max-age=0")
request.Headers.Add("dnt", "1")
request.AutomaticDecompression = DecompressionMethods.GZip
request.CookieContainer = cookies
response = request.GetResponse()
strResponseStatus = CType(response, HttpWebResponse).StatusDescription
dataStream = response.GetResponseStream()
reader = New StreamReader(dataStream)
responseFromServer = reader.ReadToEnd()
reader.Close()
dataStream.Close()
response.Close()
Это будет выполнено успешно и вернет ответ с первого раза, но у меня это повторяется каждые 15 секунд. Иногда следующий цикл также будет работать, но иногда нет. Иногда 3 шлейфа подряд срабатывают, а потом выходит из строя и работает следующий шлейф. Нет последовательности.
Что я делаю не так? Я закрываю поток чтения, чтобы не думать, что это так. Я использую только один экземпляр HTTPWebRequest и передаю объект этому коду.
Я согласен, что это не HTTP/2, как я сначала подозревал. Тайм-аут не установлен на 5 секунд, потому что даже при 120 секундах он истекает. Когда это работает, это занимает миллисекунды.
Когда это не удалось, я заметил, что для Pipelined установлено значение false, поэтому я установил для него значение true, но, похоже, это не имеет никакого значения.
Удалось ли решить проблему? Я испытываю ту же проблему
Он возвращает Gzip, и теперь я могу получить ответ после добавления нескольких заголовков. Но после успешного ответа и если я запущу его снова, это может сработать, а может и нет.
Я считаю, что решил проблему, которую тестировал в PowerShell, но в коде используются классы C#, поэтому его легко перевести на C# $wc = New-Object System.Net.WebClient $wc.Headers.Add('Accept', 'application/json') $wc.Headers.Add('Content-Type', 'application/json') $wc.Headers.Add('Accept-Encoding', 'identity') $wc.Headers.Add("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0") $content = $wc.DownloadString($url)





Попробовав как минимум пару дней разные варианты, я нашел решение. Итак, я отвечаю на свой вопрос.
Я обнаружил, что когда вы отправляете запрос, вам необходимо предоставить контейнер файлов cookie для получения файлов cookie при получении ответа. Затем вы должны отправить через этот контейнер файлов cookie последующие запросы.
У меня есть код запроса в функции (VB.Net), и я устанавливал контейнер файлов cookie как новый объект каждый раз, когда вызывал эту функцию.
Я изменил функцию, чтобы использовать контейнер cookie в качестве параметра, и создал только один контейнер cookie вне моего цикла, каждый раз передавая его в функцию. При первом вызове функции она заполняет пустой контейнер cookie, а затем последующие вызовы используют заполненный контейнер.
Вот код
Function CreateRequestSimple(ByVal sURL As String, ByVal sAuthority As String, ByRef request As HttpWebRequest, ByRef cookies2 As CookieContainer) As String
Dim Url As String
Dim dataStream As Stream = Nothing
Dim response As HttpWebResponse = Nothing
Dim strResponseStatus As String = ""
Dim reader As StreamReader = Nothing
Dim responseFromServer As String = ""
Dim cookies As CookieContainer = New CookieContainer()
Dim expiredcookie As Boolean
Try
request = HttpWebRequest.Create(New Uri(sURL))
request.Pipelined = True 'I don't think this does anything
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
request.Method = "GET"
request.Timeout = 5000
request.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.7"
request.Headers.Add("authority", sAuthority)
request.Headers.Add("method", "GET")
request.Headers.Add("scheme", "https")
request.Headers.Add("accept-encoding", "gzip, deflate, br, zstd")
request.Headers.Add("accept-language", "en-US,en;q=0.9")
request.Headers.Add("cache-control", "max-age=0")
request.Headers.Add("dnt", "1")
request.AutomaticDecompression = DecompressionMethods.GZip
expiredcookie = IsAnyCookieExpired(cookies2, request.RequestUri)
If (expiredcookie) Then
request.CookieContainer = cookies
cookies2 = cookies
Else
request.CookieContainer = cookies2
End If
response = request.GetResponse()
strResponseStatus = CType(response, HttpWebResponse).StatusDescription
dataStream = response.GetResponseStream()
reader = New StreamReader(dataStream)
responseFromServer = reader.ReadToEnd()
reader.Close()
dataStream.Close()
response.Close()
Catch ex As Exception
Return ex.Message
End Try
Return responseFromServer
End Function
Function IsAnyCookieExpired(ByVal cookies As CookieContainer, ByVal uri As Uri) As Boolean
Dim cookiecoll As New CookieCollection
' cookiecoll = cookies.
For Each cookie As Cookie In cookies.GetCookies(uri)
If (cookie.Expired) Then
Return True
End If
Next
Return False
End Function
Я не думаю, что мне нужно проверять, истек ли срок действия файла cookie, потому что я думаю, что срок действия обновляется каждый раз, когда я вызываю эту функцию.
Я вызываю функцию следующим образом (псевдокод, а не мой настоящий код)
Dim request As HttpWebRequest = Nothing
Dim cookies As CookieContainer = New CookieContainer()
Dim sResponse As String = ""
Dim sURL As String = ""
Dim sAuthority As String = "auth.com.au"
For i = 0 To 100
sURL = "http://someurl.com/extra"
sResponse = CreateRequestSimple(sURL, sAuthority, request, cookies)
Next i
Спасибо jdweng за указание на то, что файлы cookie являются основной проблемой.
Кроме того, сайт перешел на отправку ответов в формате GZip, поэтому мне тоже пришлось иметь дело с этим изменением. Еще раз спасибо jdweng за предложение этой проблемы.
Как вы думаете, почему сервер перешел на HTTP/2? Никаких указаний нет. Я подозреваю, что срок действия файла cookie истек. Попробуйте запустить, работает, а потом сразу не работает. Работа обновит файлы cookie и, возможно, начнется неработающая. Я думаю, что может произойти то, что рабочий код возвращает GZIP, который будет работать быстрее, чем возврат не ZIP. Поэтому я бы попытался добавить в ваш код следующий заголовок: «accept-encoding» = «gzip, deflate, br» Ваш последний файл может быть больше, чем предыдущие результаты.