POST запрос в calendar.google.com

  • Автор темы Автор темы IntBIZ
  • Дата начала Дата начала

IntBIZ

Новичок
Регистрация
13.10.2016
Сообщения
4
Реакции
0
Баллы
1
Здравствуйте, уважаемые форумчане.
Делаю шаблон на post запросах в гугл-календаре.

В запросе используется заголовок "Authorization:"
http://prntscr.com/kxronn

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

Помогите, пожалуйста, если это возможно...
 
возможно он берется до авторизации или генерится из определенных элементов, типа куки, дата входа...
попробуй следующее, я обычно так делаю и в 90% прокатывает
делаешь весь процесс руками, записывая код страницы в отдельный текстовый файл, потом когда видишь что передалась переменная, копируешь ее и поиском ищешь, если она есть в коде, найдешь 100%, если нет, значит генерится, надо уже курить java скрипты...
примерно так ....

ps \ пытался как-то писать гугл на реквестах, забил, слишком сложно для меня оказалось )
 
Да, я все запросы вручную просмотрел, нигде в ответах этого параметра не приходит, но она потом внезапно появляется в запросах. Следовательно да, она генерируется как-то.

Нашел в сети вот этот кусок кода, который вроде как генерирует нужный мне параметр "SAPISIDHASH", но не знаю, как его в зеннопостер запихнуть, и откуда вообще брать переменные, которые используются для генерации SAPISIDHASH.


===========
"""Return authorization headers for API request."""
# It doesn't seem to matter what the url and time are as long as they are
# consistent.
time_msec = int(time.time() * 1000)
auth_string = '{} {} {}'.format(time_msec, sapisid_cookie, ORIGIN_URL)
auth_hash = hashlib.sha1(auth_string.encode()).hexdigest()
sapisidhash = 'SAPISIDHASH {}_{}'.format(time_msec, auth_hash)
return {
'authorization': sapisidhash,
'x-origin': ORIGIN_URL,
'x-goog-authuser': '0',
}
def _get_authorization_headers(sapisid_cookie):
===========
 
Из входных параметров мне известно, что такое "sapisid_cookie", эта штука из куков берется)
 
Код:
Развернуть Свернуть Копировать
def _get_authorization_headers(sapisid_cookie):
    """Return authorization headers for API request."""
    # It doesn't seem to matter what the url and time are as long as they are
    # consistent.
    time_msec = int(time.time() * 1000)
    auth_string = '{} {} {}'.format(time_msec, sapisid_cookie, ORIGIN_URL)
    auth_hash = hashlib.sha1(auth_string.encode()).hexdigest()
    sapisidhash = 'SAPISIDHASH {}_{}'.format(time_msec, auth_hash)
    return {
        'authorization': sapisidhash,
        'x-origin': ORIGIN_URL,
        'x-goog-authuser': '0',
    }


это функция на питоне, её надо переписать на c# или на js, следует учесть что используется hashlib.
 
C#:
Развернуть Свернуть Копировать
string SAPISID = project.Variables["SAPISID"].Value.Replace("SAPISID=", "");
string origin = "%ORIGIN_URL%";

int unixTime = (int) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;

string strToHash = unixTime + " " + SAPISID + " " + origin;

var data = Encoding.ASCII.GetBytes(strToHash);
var hashData = new SHA1Managed().ComputeHash(data);
var hash = string.Empty;

foreach (var b in hashData)
{
    hash += b.ToString("X2");
}

hash = hash.ToLower();

return unixTime + "_" + hash;

C#:
Развернуть Свернуть Копировать
using System.Security.Cryptography;
 
Для чего писать браузерные костыли для google calendar если можно использовать api либо apps script, где выполнять нужные функции гораздо удобнее.
 
Для чего писать браузерные костыли для google calendar если можно использовать api либо apps script, где выполнять нужные функции гораздо удобнее.
Sapisidhash параметр используется не только в календарях. Он общий для всего Google.

Он также используется в YouTube.
Квоты в Апи YouTube понижены с 1 000 000 до 10 000. Что не позволяет при массовой работе использовать один и тот же ключ для множества аккаунтов. Либо ждать сутки, либо использовать другой ключ.

Также использование апи требует в шаблон дописывать:
1. Функционал по работе с методами апи.
2. Регистрировать приложение и получать ключи.
3. Добавлять их во входные настройки.

Куда эффективнее использовать запросы браузера подхватив нужную куку и сгенерировав новый параметр выполнить один запрос, чем городить код по авторизации в апи и получению всех токенов и их перегенерации, чтобы выполнить ту же функцию.
 
Последнее редактирование:
Здравствуйте! Спасибо огромное за код, всё как бы работает но оказывается Sapisidhash не только такой бывает а есть ещё другого типа как на картинке http://prntscr.com/pda875, с каким то индексом "_e" и там совершенно другой hash получается, я уже несколько дней бьюсь и ничего не могу найти никакой зацепки из каких параметров он генерируется, если кто знает подскажите пожалуйста!
Hash2.jpg
 
Здравствуйте! Спасибо огромное за код, всё как бы работает но оказывается Sapisidhash не только такой бывает а есть ещё другого типа как на картинке http://prntscr.com/pda875, с каким то индексом "_e" и там совершенно другой hash получается, я уже несколько дней бьюсь и ничего не могу найти никакой зацепки из каких параметров он генерируется, если кто знает подскажите пожалуйста!
Hash2.jpg
С каким индексом _e?
В коде генерируется так, как у вас на скрине.
 
С каким индексом _e?
В коде генерируется так, как у вас на скрине.
Там есть несколько видов как я понял этих hash, вот такой же hash http://prntscr.com/pdb4ic как в вашем коде и да там всё правильно работает, есть ещё такой http://prntscr.com/pdb5hv в нём нету префикса unixtime отдельного, а есть и такой как я показал выше http://prntscr.com/pdb6zb Тут ещё можно заметить такую штуку 2 запроса были с одинаковым unixtime но hash абсолютно разные, а значит значения которые там генерируются другие, вот hash для примера из запросов:
1. SAPISIDHASH 1569920003_cf5254929d2e79976b2796281a002be5ca9e768e
2. SAPISIDHASH 1569920003_c6db90cbf9260c904e7489f8c338d473f087cde5_e
В них unixtime идентичный и это всё один аккаунт в одной сессии, в один промежуток времени. Если бы у меня этот запрос работал с тем hash что у вас в коде я бы естественно тут ничего не писал, я же это не придумал)
Попробуйте если не верите создать post запросом папку в гуглдиске, и увидите что к сожалению этот код с hash не универсальный и видимо всё зависит от адреса запроса. Но в любом случаи спасибо вам уже за тот код что есть, но я реально уже куча разных параметров переставил и 2-го хеша так и не вышло, а первый чётко получился.
 
Там есть несколько видов как я понял этих hash, вот такой же hash http://prntscr.com/pdb4ic как в вашем коде и да там всё правильно работает, есть ещё такой http://prntscr.com/pdb5hv в нём нету префикса unixtime отдельного, а есть и такой как я показал выше http://prntscr.com/pdb6zb Тут ещё можно заметить такую штуку 2 запроса были с одинаковым unixtime но hash абсолютно разные, а значит значения которые там генерируются другие, вот hash для примера из запросов:
1. SAPISIDHASH 1569920003_cf5254929d2e79976b2796281a002be5ca9e768e
2. SAPISIDHASH 1569920003_c6db90cbf9260c904e7489f8c338d473f087cde5_e
В них unixtime идентичный и это всё один аккаунт в одной сессии, в один промежуток времени. Если бы у меня этот запрос работал с тем hash что у вас в коде я бы естественно тут ничего не писал, я же это не придумал)
Попробуйте если не верите создать post запросом папку в гуглдиске, и увидите что к сожалению этот код с hash не универсальный и видимо всё зависит от адреса запроса. Но в любом случаи спасибо вам уже за тот код что есть, но я реально уже куча разных параметров переставил и 2-го хеша так и не вышло, а первый чётко получился.
Я не то чтобы не верю. Просто каждый из нас по разному понимает что-то. По-этому я сделал ставку на то, что возможно вы ошиблись или не так поняли.

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

Тем не менее обратите внимание на код, в нём для вычисления хеша принимается ещё параметр origin, (url на котором отправляется SAPISIDHASH), который мог не приниматься при хешировании: https://prnt.sc/pdb6zb или origin мог быть другим.

Это как раз о том, что все мы понимаем что-то по разному, что-то не учитываем и думаем, что нужно что-то ещё.

upd: я думаю что SAPISIDHASH это 100% unixtime + хеширование трёх параметров (unixtime + sapisid + origin ). Просто на каком-это этапе меняется один из параметров и требуется новое значение SAPISIDHASH .
 
Последнее редактирование:
  • Спасибо
Реакции: phirelli
Я не то чтобы не верю. Просто каждый из нас по разному понимает что-то. По-этому я сделал ставку на то, что возможно вы ошиблись или не так поняли.

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

Тем не менее обратите внимание на код, в нём для вычисления хеша принимается ещё параметр origin, (url на котором отправляется SAPISIDHASH), который мог не приниматься при хешировании: https://prnt.sc/pdb6zb или origin мог быть другим.

Это как раз о том, что все мы понимаем что-то по разному, что-то не учитываем и думаем, что нужно что-то ещё.

upd: я думаю что SAPISIDHASH это 100% unixtime + хеширование трёх параметров (unixtime + sapisid + origin ). Просто на каком-это этапе меняется один из параметров и требуется новое значение SAPISIDHASH .
Я понял, тоже к этому склоняюсь, очень вряд ли что они там будут что то сверх мудрить, буду пробовать по разному, если выйдет отпишусь. Спасибо за ответ!
 
  • Спасибо
Реакции: Meteorburn
Тоже столкнулся с этим SAPISIDHASH, при попытках загрузить в google drive файлы post запросом.
Код который выше, работает, но только на GET запросах и SAPISIDHASH генерируется верный, но в POST запросе, который собственно и грузит файл на drive, уже не получается сгенерить этим кодом.
Проверял подстановкой готовых параметров из запросов.

Коллеги, кто разобрался, подскажите если не сложно.
 

Вложения

  • get.JPG
    get.JPG
    146,9 KB · Просмотры: 319
  • post.JPG
    post.JPG
    133,8 KB · Просмотры: 298
  • Спасибо
Реакции: phirelli
так получилось у вас все таки написать шаб для гугл календарей?
 
C#:
Развернуть Свернуть Копировать
string SAPISID = project.Variables["SAPISID"].Value.Replace("SAPISID=", "");
string origin = "%ORIGIN_URL%";

int unixTime = (int) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;

string strToHash = unixTime + " " + SAPISID + " " + origin;

var data = Encoding.ASCII.GetBytes(strToHash);
var hashData = new SHA1Managed().ComputeHash(data);
var hash = string.Empty;

foreach (var b in hashData)
{
    hash += b.ToString("X2");
}

hash = hash.ToLower();

return unixTime + "_" + hash;

C#:
Развернуть Свернуть Копировать
using System.Security.Cryptography;


Спасибо за код, в C# не особо силен, закинул его в кубик для выполнения, прописал
C#:
Развернуть Свернуть Копировать
using System.Security.Cryptography;
В итоге получаю вот такие ошибки, подскажите, что сделал не так?

Компиляция кода Ошибка в действии "CS0246" "The type or namespace name 'SHA1Managed' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 10; Cтолбец: 20]

Компиляция кода Ошибка в действии "CS1579" "foreach statement cannot operate on variables of type '?' because '?' does not contain a public instance definition for 'GetEnumerator'". [Строка: 13; Cтолбец: 19]

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



UPD. Сам не понял что сделал, но оно заработало, может быть некорректно скопировал.
 
Последнее редактирование:
  • Спасибо
Реакции: Meteorburn

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)