Зачем писать эту статью?
(главным образом потому, что кто-то из группы qq пытается симулировать вход в Zhihu, но безуспешно). сложность была значительно улучшена.
начать захват
Сначала откройте домашнюю страницу Zhihu, затем введите пароль учетной записи, войдите в систему (не забудьте ввести неправильный пароль)
Итак, мы можем видеть заголовок запроса (заголовок запроса выглядит следующим образом)
Мы обнаружили, что эти заголовки запросов отличаются от обычных (в красной рамке)
-
authorization
(Похоже, он должен быть сгенерирован js, см. далее -
Content-Type
(Сзади есть еще border=xxx. Что это значит? Посмотрите параметры запроса позже. -
cookie
: обратите внимание на это, файл cookie не пуст перед входом в систему, что указывает на то, что перед входом в систему должна быть выполнена операция set-cookie. -
x-udid,x-sxrftoken
Эти два параметра являются проверочными, и предполагается, что их можно найти в исходном коде веб-страницы.
Посмотрите еще раз параметры запроса
Вы можете видеть, что параметры отображаются в виде полезной нагрузки.
Люди, увидевшие это впервые, вероятно, будут ошеломлены.
Это должно быть объединено с запросом
Content-Type:
multipart/form-data; boundary=----WebKitFormBoundary2KNsyxgtG28t93VF
приди и посмотри
multipart/form-data
Это метод отправки формы, а следующая граница = xxx — это способ разделить форму. Что это значит? Просто посмотрите на простой маленький пример, и вы поймете
------WebKitFormBoundary2KNsyxgtG28t93VF
Он разделен на разные параметры, поэтому вы можете просто игнорировать его (это определяется границей за Content-Type выше, вы можете изменить ее по своему желанию)
После удаления разделительной линии приведенное выше эквивалентноclient_id=c3cef7c66a1843f8b3a9e6a1e3160e20
,
grant_type=password
.
Тогда эту полезную нагрузку легко понять.
Давайте посмотрим, какие параметры есть в сумме.
Параметров довольно много, вы можете видеть, что многие параметры фиксированы, такие как номер счета, пароль, временная метка и т.д.
Есть два client_id, подписи которых изменились
начать искать параметры
authorization
:
В хроме напрямую нажимаем ctrl+shift+f (глобальный поиск, поиск по js, css и т.д.), видим, что обыскали, и написано прямо в js, а потом просто меняем аккаунт и хватаем пакет еще раз, и обнаруживаем, что значение авторизации все еще фиксировано, значит, авторизация написана непосредственно в js, а не динамически модифицируется (тогда мы уже нашли значение авторизации)
cookie
:
Перед входом в систему я обнаружил, что значение файла cookie не является пустым, что указывает на то, что после открытия веб-страницы должна быть выполнена операция установки файлов cookie.Если мы хотим проверить, сначала откройте браузер в режиме инкогнито (в основном, чтобы очистить все предыдущие файлы cookie, не отвлекайтесь), затем включитеzhihu.com, мы обнаружили, что у него есть несколько действий set-cookie
Затем, если мы хотим смоделировать, очень простой способ — напрямую использовать request.session.
x-udid,x-sxrftoken
:
Как правило, этот параметр проверки находится в исходном коде веб-страницы, поэтому просмотрите исходный код веб-страницы напрямую.
Вы можете видеть, что он был найден. Далее следует, как узнать это. Вы можете использовать обычный или xpath, чтобы найти его.
client_id
:
Вы обнаружите, что client_id точно такой же, как авторизация выше
signature
:
Или используйте ctrl+shift+f для глобального поиска
Я обнаружил, что нашел, но параметры динамически генерируются js...
В основном, чтобы найти, как зашифровать, а затем использовать Python для его имитации.
Шаг 1: Загрузите этот js, отформатируйте его (улучшите внешний вид кода)
Шаг 2: Используйте скрипку, чтобы заменить исходный js и использовать только что отформатированный js
Шаг 3: Отлаживайте медленно. . . Пока я не узнаю, как генерировать...
Шаги, вероятно, такие
但是假如你js像我一样很渣的话,你可以直接找到这段加密的js,然后Python执行这段js就可以了。 . .
Выше мы нашли все параметры, которые должны искать, а дальше осталось только смоделировать отправку.
Чтобы получить код, обратите внимание на общедоступную учетную запись WeChat [совместное использование поискового робота python] и отправьте «код входа в систему zhihu», чтобы увидеть ~~~