Обучение обращению Instagram GraphQL Profile 403 Ошибки выполнения с помощью x_instagram_gis - PullRequest
0 голосов
/ 19 сентября 2018

Я копался в Instagram GraphQL, пытаясь понять, как это работает.Я выяснил, откуда берутся переменные query_hash, id и after.От анализа профиля JSON и хэша от другого .js.

Пока все хорошо.

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

variables = '{"id":"%s","first":12,"after":"%s"}' %(OwnerID, end_cursor)
encoded_vars = urllib.quote(variables, safe='"')
url = 'https://www.instagram.com/graphql/query/?query_hash=%s&variables=%s' % (QueryHash, encoded_vars)
print(url)

Исходя из того, что я могу сделать с браузером, это должно работать, насколько я могу разобрать.Поэтому в заголовках должно быть что-то не так.

Это не может быть аутентификация, потому что браузер, который не вошел в систему, может выполнять эти вызовы, и он будет работать нормально.Так что это что-то в заголовках, специфичных для этого сеанса.

Я попытался обернуть все в сеансе с помощью

with requests.Session() as session:

Первоначальный запрос к странице профиля, а затем запрос к urlсделано с той же сессии.Если я правильно понимаю, это должно иметь те же заголовки, что и браузер.

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

Обновление:

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

Я выкинул session.headers, и после того, как Googling вокруг для того, что там есть, добавил немного к заголовкам:

  x_instagram_gis = hashlib.md5(rhx_gis.encode()).hexdigest()
    session.headers.update({'x-instagram-gis': x_instagram_gis})
    session.headers.update({'x-requested-with': 'XMLHttpRequest'})
    session.headers.update({'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'})

Я разобрал ГИС и закодировал его.х-запрашиваемый-с совпадает с запросом браузера, а пользовательский агент просто кажется здравым смыслом.

Я действительно не знаю, что еще попробовать.Я знаю, что есть альтернативные способы сделать это, но я пытался понять, как работает API.

Обновление 2:

Хорошо, я понимаю, почему сеанс не работал.Конечно, это не сработало.Заголовок браузера устанавливается с помощью javascript, иначе мне не пришлось бы извлекать хеш и т. Д. Отдельно.Doi.

Теперь рассмотрим другие заголовки в Chrome.Там есть печенье и из того, что я собираю, которое обрабатывается сессией.Есть обычные вещи, такие как принятие кодировки и реферер.Есть заголовки, такие как: путь: и: авторитет: но здесь мое нечеткое понимание становится еще хуже.Я не могу отправить эти заголовки, если удаление двоеточий не приведет к тому же результату.

Так что же такое обратный инжиниринг?Черт тонны проб и ошибок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...