Отправляю запрос к api Литреса для получения списка новых книг с определенной даты. Но проблема в том, что если в качестве чекпоинта указать время на час и более от текущего, то выдает ошибку
Query signature is invalid: timestamp expired
А если меньше, то все хорошо, запрос возвращает xml с данными.
string checkpoint = "2019-07-06 16:00:41";
string timestamp = ConvertToUnixTimestamp(checkpoint).ToString();
string sha = ComputeSha256Hash(timestamp + ":secret_key:" + checkpoint);
string place = "place";
var values = new Dictionary<string, string>
{
{ "checkpoint", checkpoint },
{ "place", place },
{ "timestamp", timestamp },
{ "sha", sha }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("https://partnersdnld.litres.ru/get_fresh_book/", content);
var responseString = await response.Content.ReadAsStringAsync();
static string ComputeSha256Hash(string rawData)
{
using (SHA256 sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData));
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
builder.Append(bytes[i].ToString("x2"));
}
return builder.ToString();
}
}
static double ConvertToUnixTimestamp(string date_str)
{
DateTime date = DateTime.Parse(date_str, new CultureInfo("ru-RU"));
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date - origin;
return Math.Floor(diff.TotalSeconds);
}
Вот что по поводу чекпоинта написано в их инструкции:
• checkpoint – время в формате ISO (например, 2017-12-06 19:35:39), с которого следует забирать новинки. Вы получите список новинок со временем большим или равным checkpoint и меньшим /fb-updates/@timestamp (см. описание XML ниже). Если вы хотите получать непрерывную ленту новинок, сохраняйте отданный вам сервером /fb-updates/@timestamp и в следующий раз используйте его в качестве checkpoint. Для получения полной базы (при первоначальной загрузке) используйте чекпойнт «2013-01-01 00:00:00»;
и
Программисты Windows! Проверьте свои таймстампы на http://www.timestampgenerator.com/. Обратите внимание, что вычислять таймстамп из местного времени нельзя! Таймстамп считается по UTC и без сдвига летнего/зимнего времени. В Википедии есть множество подробностей по теории таймстампа, а также есть огромное количество исходников для любого языка, от Perl до PL/SQL.
Я проверял, мой код генерирует timestamp такой же, как и там, если указать нужное время. Подскажите, что не так?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть пустая форма Form1 и присоедененная к ней notifyicon1В скрипте Form1
Вот пример процедуры , написанной в MYSQL WORKBENCH версии 80
Пробую записать JSON в MySql, но не получается из-за слэшей и кавычек которые находятся в JSON'неКак можно сделать?