Алексей Тимофеев, я смутно помню, что я создавал токен сообщества и что-то он не позволял совсем, по-моему просто даже wall.post - не картинки. Поэтому я сделал токен пользователя и с ним у меня всё работало. Был бот, который постил новые материалы с сайта (не моего) в телегу и vk. Телега ещё работает на автопилоте (t.me/cont_zdravysmysl), vk давно сломался.
Простой Человек, не существует "лучшего варианта". Иначе бы все собирали "лучший вариант" и в приложении не было бы такой прорвы ключей и вариаций.
Например, curl можно собрать с openssl или с gnutls. Можно собрать с idna или без. Всё это позволяет при необходимости контролировать наличие фич, общий размер, вычислительную производительность и даже наличие потенциальных векторов атаки на уязвимости. В конце концов, такой софт может использоваться в том числе на слабых устройствах типа роутеров, промышленных роботов итд итп, где лишние фичи и большой объём конечного приложения будут скорее минусом, чем плюсом.
Например, если программа слушает какой-то сетевой порт, то при запуске второй программа не сможет занять уже занятый порт.
Также может быть непросто, если программа умеет определять, что один экземпляр уже запущен и вместо второго запуска давать команду запущенному экземляру. К пример, браузер или LibreOffice так делают - второй запуск приложения приводит к открытию ещё одной страницы/документа в запущенном приложении (но по крайней мере в случае с браузером можно ключами запустить ещё одну независимую сессию).
Если программа ещё и нацелена на то, чтобы её ни в коем случае не запускали повторно, то ситуация может совсем осложниться, ведь способов обнаружить второй запуск очень много. Можно использовать временные файлы и фаловые блокировки, межпроцессный обмен (включая dbus, unix-сокеты), в клиент-серверных приложениях можно передавать на сервер характеристики системы (тот же мак-адрес сетевухи)...
Однако всё это не значит, что нельзя запустить программу второй раз. Как раз запуск программы в случае любой защиты или в случае наличия препятствий для работы (например, занятый сетевой порт) всё равно происходит, только она аварийно завершается или передаёт команду в уже запущенный экземпляр или даже просто не может полноценно работать, но продолжает работать с ограничениями.
С большинством программ это всё не происходит. Например, можно спокойно запустить несколько экземпляров bash.
Плохая идея. Обычно имеет смысл использовать то, что идёт по умолчанию, и пересобирать только в том случае, если в конфигурации по умолчанию чего-то нет. И то, может оказаться, что лучше скачать специальную сборку (типа curl-impersonate) или воспользоваться docker-образом, а не самому прыгать с бубном.
maksam07, "куда проще" делать стандартные конфигурации для подключения пользователей с обходом всяких блокировок путём клацания мышкой в админке. Однако 3proxy обычно используется совсем не для этого.
maksam07, 3x-ui создан для принципильно другого сценария использования. Это как говорить, что перешёл на курьерскую доставку вместо использования самоката для поездок в магазин.
Таких умников, которые говорили "ну на тот тэг много подписано" всегда было немало и никогда этот аргумент не прокатывал, потому что это не имеет никакого отношения к делу.
Кроме того, не забываем, что в правилах есть пункт, по которому вопрос не должен представлять из себя "задание". А в данном случае именно "задание" он и представляет, если так категорически "требуется" тэг конкретного языка. В то время как сам вопрос касается лишь метода получения данных, а не попытки решения задачи на конкретном языке. Ещё раз повторю: нет ни строчки кода на языке - не должно быть тэга языка - очень простая мнемоника.
Использовался как раз этот метод:
upload_url = self.vk_api.photos.getWallUploadServer(group_id=self.group_id)['upload_url']