it not working , its stuck on birthday,can you fix it ?
Гайд на тему: Как с помощью POST запроса произвести выгрузку изображения на веб-ресурсы.
-
Для примера будем использовать файлообменник: https://dropfiles.ru/#
Так происходит загрузка изображения средствами браузера:

Проанализировав запросы, можем понять, что происходит POST запрос:

Казалось бы все просто, формируем схожий запрос и победа, но не тут то было.
Есть загвоздка, мы не видим каким образом передается изображение.
Сначала посмотрим, что передается:------WebKitFormBoundary7b3QaHozwsO6SsYd Content-Disposition: form-data; name="u_key" b06403b386cc08fbc84dca91e6faec65 ------WebKitFormBoundary7b3QaHozwsO6SsYd Content-Disposition: form-data; name="files[]"; filename="Заставка.jpg" Content-Type: image/jpeg ------WebKitFormBoundary7b3QaHozwsO6SsYd--Первый параметр понятен:
------WebKitFormBoundary7b3QaHozwsO6SsYd Content-Disposition: form-data; name="u_key" b06403b386cc08fbc84dca91e6faec65Это ключ, который висит на инпуте, его можем спарсить, кинув обычный GET к сайту:

Вытягиваем его с ответа регуляркой, либо же xpath`ом, кому как удобней:

С этим разобрались, сразу расскажу о непонятном значении WebKit:
WebKitFormBoundary7b3QaHozwsO6SsYdЗдесь всё просто, статическая часть:
WebKitFormBoundaryИ 16 рандомных символов (Верхнего, нижнего регистра англ букв + цифры от 0 до 9)
Так сконкатенировав две строки: WebKitFormBoundary + 16 символов, у нас выйдет уникальный параметр, что и требуется для запроса.Приступим к тому, с чем я столкнулся и пол дня просидел, решав. А именно эта часть кода:
------WebKitFormBoundary7b3QaHozwsO6SsYd Content-Disposition: form-data; name="files[]"; filename="Заставка.jpg" Content-Type: image/jpeg ------WebKitFormBoundary7b3QaHozwsO6SsYd--Фишка в том, что по сути запрос +- так и выглядит, но не отображается 1 параметр, а это само изображение. Сразу к тому, как и в каком виде его туда всунуть:
Нужно указать формат изображение base64 и через двоеточие, без пробелов, указать переменную, в которой находится переменная содержится сама картинка (При чтении изображения, не забыть поставить галку на "Сохранить в формате base64":

PS: В дальнейшем у меня будет путь прописан в переменной, что не запутались.
Далее переходим к формированию самого POST запроса:
- Указываем URL: https://dropfiles.ru/jqu/ (Именно сюда отсылается изображение, это мы увидели с браузера, где просматривали параметры запроса)
- Заголовок. Я его полностью скопировал, за исключением строки:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary[[WEB_KIT]]Здесь как видно, я заменил значение WebKit сгенерированным выше. Остальное оставил без изменений. Скорее всего больше 80% параметров вообще можно убрать, на работу не повлияет.
Кстати не забываем про параметр "Content-Length", длина передаваемого значения, частенько из-за него появляются ошибки в запросах.
Далее перейдем к самому телу запроса:

------WebKitFormBoundary[[WEB_KIT]] Content-Disposition: form-data; name="u_key" [[U_KEY]] ------WebKitFormBoundary[[WEB_KIT]] Content-Disposition: form-data; name="files[]"; filename="sss.png" Content-Type: image/png base64:[[VARIABLE_WITH_BASE64_ENCODING]] ------WebKitFormBoundary[[WEB_KIT]]--Видно, что везде заменен WebKit
Указан спарщенный ключ [[U_KEY]]
И в отличие от оригинала, который был в браузере, появилась ещё одна строка:base64:[[VARIABLE_WITH_BASE64_ENCODING]]Как уже было сказано, в переменной [[VARIABLE_WITH_BASE64_ENCODING]] содержится изображение в base64.
Таким образом тело запроса сформировано, но осталось разобраться с Content-Type (Типом содержимого этого тела).
Из стандартных вариантов мы имеем:
application/x-www-form-urlencoded multipart/form-data application/jsonПо сути 2 параметр нам подходит, но он не полон и работать с ним скрипт у нас не будет.
Дописываем его и получаем:multipart/form-data; boundary=----WebKitFormBoundary[[WEB_KIT]]Выглядит это так:

Все, запрос у нас сформирован, Запускаем скрипт и наблюдаем, что изображение на сервис загружено:

Вот ответ который мы получили:
{ "files": [ { "name": "c11d1fc54d0eb18b6102316b8ebe6991.jpeg", "size": 4463808, "type": "image/jpeg", "niceSize": "4.26 MB", "realName": "Заставка.jpg", "fileKey": "bde6488feb97671a1b653d634ff75861", "delFileKey": "27aeb3be164f818574c20f8408fb555c", "delete_url": "https://dropfiles.ru/jqu/?file=c11d1fc54d0eb18b6102316b8ebe6991.jpeg", "delete_type": "DELETE" } ] }Этим можно было бы закончить гайд, но я добью парой строк именно для этого сервиса.
Путём проверок и сверки строк выяснил, что параметр "fileKey" отвечает за ссылку на изображение.
Сама форма ссылки:https://dropfiles.ru/download/[[FileKey]].htmlПо итогу генерим строку и выходит рабочий URL:
https://dropfiles.ru/download/bde6488feb97671a1b653d634ff75861.htmlТак же можем кинуть GET запрос и спарсить ссылку уже на само изображение, будет она такого типа:
/files/718bef28580ca04ce2f37a4afe84ccfc.jpegТак же собираем полную ссылку:
https://dropfiles.ru/files/718bef28580ca04ce2f37a4afe84ccfc.jpegНу и чекать нужно, бывает, что с 1 запроса перекидывает на сайт (якобы мы его посетили), а уже по 2 запросу по этой же ссылке скачивается изображение. Но не суть.
Таким образом мы разобрались как отправлять по POST запросу изображение по средствам BAS.
Удачи тебе в написании будущих проектов)
Скрипт: Пример скрипта.xml```
code_text -
@Empire-Cash-Bot said in Гайд на тему: Как с помощью POST запроса произвести выгрузку изображения на веб-ресурсы.:
base64:[[VARIABLE_WITH_BASE64_ENCODING]]
а как ты вообще разобрался что нужно подставить ниже base64:[[VARIABLE_WITH_BASE64_ENCODING]] и Content-Type дописать? просто методым тыка? в сниффе запроса ведь этого нет. Ещё я урок на ютубе смотрел, там в столбик вот этот Content-Despositon не передаёют, а через конструктор данных запроса параметры вставляют, но я ещё сам плохо в запросах разберуюсь вообще не найду норм инфу по ним
-
@Zack9 часть с браузера анализатора взял, другую определил так: В старой версии BAS записал запросы, оттуда и понял как именно происходит специфическое составление запроса именно в самом басе. В совокупности и получилось нащупать рабочий метод.