Что нового

Сеть, интернет Как после отправки GET-запроса получить html страницы ?

KEO

Новичок
Сообщения
26
Репутация
0
Доброго дня всем. Умею создавать http-запрос через ObjCreate('WinHttp.WinHttpRequest.5.1').
Планирую отослать GET-запрос. Очень хочу в ответ получить ответный текст, который будет html странички.

Наверное не совсем сразу понятно. Попробую чуть по-подробнее.
Ну вот, допустим, есть некая онлайн игра, где развивается персонаж. У этого персонажа есть артефакты, которые можно на себя одевать. Каждый артефакт имеет свой уникальный идентификатор (id). Заход на страничку с артефактами осуществляется переходом по адресу "https://www.игра.ru/inventory.php". Когда я в браузере FireFox нажимаю правую кнопку мыши и выбираю "Исходный текст странички", то мне на экран выходит html-текст загруженной странички Инвентаря. И вот там, среди прочих крякозябр, я могу увидеть нужный мне идентификатор нужного мне артефакта.

Суть в чем: вычленить этот идентификатор из всего того html-хлама - вообще не проблема для меня. Проблемой на данный момент является получение всего этого исходного когда странички.
Так яснее ?

Вопрос: как это сделать ? Если уже где-то обсуждалось (хотя я не нашел, используя поиск) - огромная просьба дать ссылку, внимательно изучу и почитаю. Заранее спасибо.
Сообщение автоматически объединено:

Нет, я не зациклен на создании http-запроса через ObjCreate('WinHttp.WinHttpRequest.5.1'). Если вы мне подскажете иной способ как сделать запрос и в итоге получить решение по моему вопросу - рассмотрю любой ваш вариант.
 
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Без конкретной ссылки на игру, сомневаюсь что кто-то сможет дать вам внятный ответ. К примеру во многих браузерных играх, сам перечень id-шников и тд записан чуть ли не в самом низу исходного текста страницы (в основном в json), а браузер из него уже строит внятный вид
и при этом не понимаю в чем проблема получить исходник страницы (посмотреть в браузере по какому запросу идет ссылка и добавить туда куки и referer)
 
Автор
K

KEO

Новичок
Сообщения
26
Репутация
0
Да не нужен мне id шник ! Ну я же четко и подробно расписал что мне нужно ! Мне нужен исходник страницы (html-код) ! Все остальное (в полученном коде) найду и отсортирую сам !

Помогите html-код страницы получить !
Сообщение автоматически объединено:

Ремарка: через IE не годится ! Я видел в инете как решить мою задачу через функции IECREATE и еще какая то. Мне нужно посылать запрос через уже открытую сессию в браузере. В частности Firefox
 

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
А я подробно написал, что без конкретной ссылки, вам никто ничем помочь не сможет. Чтоб получить исходник стр, достаточно указать только куки и referer
 
Автор
K

KEO

Новичок
Сообщения
26
Репутация
0
А я подробно написал, что без конкретной ссылки, вам никто ничем помочь не сможет. Чтоб получить исходник стр, достаточно указать только куки и referer

Да господи ты боже ты мой.
Хорошо, вот ссылка: https://www.wildberries.ru/

Если в FireFox нажать правую кнопку мыши и выбрать пункт "Исходный код страницы", то там выйдет окно со следующим содержанием:
http://joxi.ru/V2Vj4bZHGlNNa2?d=1 (это скриншот, залитый на файлообменик).

Вот я хочу весь этот текст получить в переменную (наверное в текстовую). Получить через http-запрос, а не нажатием правой кнопки мыши.

Решение ?
 

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Код:
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", "https://www.wildberries.ru")
$oHTTP.Send('')

FileWrite("wildberries.7z",$oHTTP.Responsebody)

$ZipFile = @ScriptDir & "\wildberries.7z"
$ExtractTo = @ScriptDir
$objShell = ObjCreate("Shell.Application")
$FilesInZip = $objShell.NameSpace($ZipFile).items
$objShell.NameSpace($ExtractTo).CopyHere($FilesInZip,0x4)

FileDelete($ZipFile)

$hFile = FileOpen(@ScriptDir & '\wildberries', 0)
$Text = FileRead($hFile)
FileDelete(@ScriptDir & '\wildberries')
MsgBox(0,"", $Text)
 
Автор
K

KEO

Новичок
Сообщения
26
Репутация
0
1. Проверить сейчас нет возможности. Интернет у меня какой-то кривой. Через МТС-связь. Есть проблемы с интернет-пакетами, такое уже было ранее и не раз. Не суть. Суть в том, что смогу проверить только дома (дома буду 27.11.2023). Уже скоро. Там и проверю.

2. Не совсем я понял: зачем Responsebody запихивать в zip-архив, а потом его обратно оттуда разворачивать ? Почему нельзя сразу напрямую:
$Text = $oHTTP.Responsebody ?
Не я не спорю. Возможно я пока чего-то недопонимаю. Вот, уточняю.

3. Вы писали, что надо использовать Referer и куки. И где они у вас к представленном коде?

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

Но мне стало интересно другое: где у вас в коде cookie и referer ? Да и зачем вообще referer в данном случае ? Он никакой роли не играет в данном случае.
Опять же: не спорю. Лишь пытаюсь уточнить.
 

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
2. потому что wb передает тело и не выдает распакованный текст, а только сжатый и без распаковки ничего не получить (может есть вариант более проще, без сохранений, но думать как-то лень на этот счет)
3. так как вы писали про игры, то при post запросах и во многих случаях get запросах часто идует проверка на referer (сам делал для одной игры бота и там без этого никуда) (иногда есть проверки, что сначала нужно отправить get запрос, а только потом уже post с командой)
 
Автор
K

KEO

Новичок
Сообщения
26
Репутация
0
2. потому что wb передает тело и не выдает распакованный текст, а только сжатый и без распаковки ничего не получить (может есть вариант более проще, без сохранений, но думать как-то лень на этот счет)
3. так как вы писали про игры, то при post запросах и во многих случаях get запросах часто идует проверка на referer (сам делал для одной игры бота и там без этого никуда) (иногда есть проверки, что сначала нужно отправить get запрос, а только потом уже post с командой)

Ок, спасибо за наводку. Домой приеду - все проверю. И если надо - укажу и referer, и куки.
Поэтому, далеко не уходите. Возможно еще пообщаемся тут на эту тему 27.11 вечером :smile:


Кстати, мысль: а если указать в заголовке не gzip, а deflate - не поможет ?
Сообщение автоматически объединено:

Код:
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", "https://www.wildberries.ru")
$oHTTP.Send('')

FileWrite("wildberries.7z",$oHTTP.Responsebody)

$ZipFile = @ScriptDir & "\wildberries.7z"
$ExtractTo = @ScriptDir
$objShell = ObjCreate("Shell.Application")
$FilesInZip = $objShell.NameSpace($ZipFile).items
$objShell.NameSpace($ExtractTo).CopyHere($FilesInZip,0x4)

FileDelete($ZipFile)

$hFile = FileOpen(@ScriptDir & '\wildberries', 0)
$Text = FileRead($hFile)
FileDelete(@ScriptDir & '\wildberries')
MsgBox(0,"", $Text)

Я уже дома. Пробую.
Архив создаёт, но не распаковывает его. Есть идеи почему ?
 
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Ок, спасибо за наводку. Домой приеду - все проверю. И если надо - укажу и referer, и куки.
Поэтому, далеко не уходите. Возможно еще пообщаемся тут на эту тему 27.11 вечером :smile:


Кстати, мысль: а если указать в заголовке не gzip, а deflate - не поможет ?
Сообщение автоматически объединено:



Я уже дома. Пробую.
Архив создаёт, но не распаковывает его. Есть идеи почему ?
возможно винда старая, ищите другие методы распаковки архива по типу zlib
 
Автор
K

KEO

Новичок
Сообщения
26
Репутация
0
возможно винда старая, ищите другие методы распаковки архива по типу zlib

Самая старая, которая только может быть. "Windows 11 build 23H2" :smile:


Да, я уже нашел тут кое-что. Еще не разбирался, пока некогда. Но в любом случае думаю уж эту проблему я решу. Пакет с "просто сайта" (такого как Wildberies) приходит. А вот с сессии (такой, как онлайн игра) пока нет. Там по-любому надо ковырять через Куки. Ладно, это я позже займусь.

В любом случае инфа о том, что пакеты приходят не в чистом виде, а в запакованном - для меня уже была полезна. Спасибо
Сообщение автоматически объединено:

возможно винда старая, ищите другие методы распаковки архива по типу zlib

Добрались руки. Выяснил: тело пакета, которое приходит по .Responsebody - запечатано не ZIP-архивом. А чем-то другим. Скорее всего как вы и предположили - 7Z. Поэтому распаковка не проходит. Я уж не знаю как она там это видит. Возможно по сигнатуре определяет. Заменив на реальный ZIP-архив - всё работает.

Ладно, я нашел способ как распаковать.
Код:
Run('7z.exe e "' & $ZipFile & '" -aoa -o"' & $ExtractTo & '"', @ScriptDir, @SW_HIDE)


Вот это работает отлично.

Всё, сейчас буду ковырять: почему с сессии не приходит тело респонза.
Сообщение автоматически объединено:

возможно винда старая, ищите другие методы распаковки архива по типу zlib

Начал разбираться.
1. Да, требуется указывать Куки, а в них обязательно PHPSESSID. Ну его я беру с кэша браузера.
2. А далее ответ приходит в каком-то двоичном формате. Ни разу не архив. Ни ZIP, не 7Z. Вообще непонятно что.
3. Но есть хорошая новость: как я и предполагал - помогло сделать GET-запрос с заголовком deflate.
Через браузер по умолчанию запрос идет как 'Accept-Encoding','gzip, deflate, br'.
Но если поставить: .SetRequestHeader('Accept-Encoding',deflate') - всё отлично приходит в расшифрованном виде. :smile: Да, размер больше, чем не зашифрованном. Главное теперь оттуда можно достать ID-артефакта, а он там есть, я проверил. :smile:

Кстати, если убрать deflate и br и оставить gzip - приходит в zip-архиве.


Всё, что я хотел - я получил от этой темы.
 
Последнее редактирование:
Верх