Задачка (скачивает файл JSON вместо XLSX)

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 364
Благодарностей
957
Баллы
113
В общем, ситуация следующая.
Нужно в личном кабинете скачать файл. При скачивании в браузере (что в обычном, что в зенно при клике на кнопку скачать) качается нормальный xlsx файл, который открывается в Excel.
При попытке скачать GET-запросом (даже просто через повтор из монитора трафика), качается JSON файл, который, выглядит как-то так:
JSON:
{"data":{"name":"Файл.xlsx","file":"UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAARAAAAZG9jUHJvcHMvY29yZS54bWykkU9r8zAMh+/vpwi+J3JaKO9Ckh42etpgsI6........{КУЧА СИМВОЛОВ}","contentType":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},"error":false,"errorText":"","additionalErrors":null}
Понятно, что в поле file: очень много текста.
Заголовки в запросе после клика выглядят так:
C#:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36
Accept: */*
Accept-Language: ru-RU,ru;q=0.7,en-US;q=0.5,en;q=0.3
Content-type: application/json
Connection: keep-alive
Очевидно, что первое, что я попробовал сделать, это сменить ContentType на то, что указано в JSON'е, не сработало - качает все равно json. Все возможные варианты типа контента, которые вроде как должны генерить именно XLS(X) тоже не сработали, качает json ))
Возможно, как-то можно конвертировать то, что стоит в file, но пока не прикину, как. XLSX - бинарный, его просто так не запишешь через "запихать этот текст в файл и назвать его Файл.xlsx".
Есть у кого мысли, как получить GET-ом нужный файл? )))
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
этот текст похож на base64. Попробуй декодировать и сохранить в файл

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

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 364
Благодарностей
957
Баллы
113
Что касается скачивания напрямую, то скажу очевидное. Почему бы не отследить запрос, когда ты нажимаешь кнопку и не повторить его?
Я же написал, что повторял - с этого всегда начинаю )) Он все равно выдает другой вариант (как раз и качает json).
Насчет base64 - спасибо за мысль, почему-то очевидный вариант пролетел мимо ))) Попробую.

update: Да, судя по всему, это base64 (по крайней мере, при декодинге начала файла похоже на обычный xlsx). Пока файл не открывается при записи, выдает ошибку, возможно, где-то с кодировками надо потестировать будет.
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
Пробуйте через альтернативные запросы, либо сразу через curl.
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
734
Благодарностей
249
Баллы
43
  • UEsDBBQA это первые 8 символов во многих форматах файлов DOCX
  • UEsDBBQABgAIAAAA первые 16 символов более чем в 75% файлов DOCX.
что то типа такого DatatypeConverter.printBase64Binary
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 364
Благодарностей
957
Баллы
113
Как говорится, решил проблему, поделись с общественностью, вдруг кому еще пригодится ))
В моем случае сработал такой сниппет (в переменную 'text', соответственно, сам "код" файла из json) :
C#:
string text = project.Variables["text"].Value.Replace("_", "/").Replace("-", "+");
Byte[] bytes = Convert.FromBase64String(text);
File.WriteAllBytes(project.Variables["final_path"].Value, bytes);
Всем спасибо за подсказки ))
ps. Если что, я не два месяца над ней сидел. Все руки не доходили, малек не до этого было ))
 
  • Спасибо
Реакции: nabatchikoff и backoff

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