Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844

Как установить read timeout?

23.03.2022, 19:04. Показов 10996. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Возник важный вопрос: есть ли на сегодняшний день рабочий способ поставить read timeout на http запрос используя хоть какую-нибудь либу?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2022, 19:04
Ответы с готовыми решениями:

Telegram+Telebot = Read timeout error?
Доброго времени суток. Держу небольшого бота на выделенной машине. Переодически вылетает подобная ошибка: Traceback (most recent call...

Как установить timeout на чтения файла в urllib.request.urlopen
Доброго времени суток. У меня возникла задача установить лимит времени на чтения файла. То есть если response.read() длиться больше 50...

Bluetooth Android. read failed, socket might closed or timeout, read ret: -1
Всем привет! Есть след. девайсы: OnePlus, Samsung A50, Pixel 3a Пытаюсь подключить девайсы по bluetooth. Получается следуещее - при...

36
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.03.2022, 18:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Matrix3007 Посмотреть сообщение
а aiohttp вообще подумал
Насчет aiohttp ничего не понял.

А можно как-то больше конкретики?
Что например вообще происходит при подключении через requests или другой клиент?
Какая ошибка в конечном итоге выдается на клиенте?
Или коннект так и висит на протяжении 2 часов? (это дефолтный таймаут проверки пассивных соединений TCP стеком для последующего разрыва, если на том конце никого нет)
Впрочем, маршрутизаторы тоже имеют свой интервал очистки от "мертвых" сеансов - обычно он всего 10 минут.

Добавлено через 31 минуту
Я так понял (по некоторым issue на github) что проблема есть только при использовании https прокси.
Потому что использовании http прокси read timeout работает.
Python
1
2
3
4
5
6
7
>>> requests.get('https://en.wikipedia.org/wiki/List_of_HTTP_status_codes',timeout=(1,1),proxies={'http':'http://45.14.173.90:80'})
<Response [200]>
>>> 
 
>>> requests.get('https://en.wikipedia.org/wiki/List_of_HTTP_status_codes',timeout=(1,0.01),proxies={'http':'http://45.14.173.90:80'})
...
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='en.wikipedia.org', port=443): Read timed out. (read timeout=0.01)
А вот найти бесплатный рабочий https сервер у меня не вышло (смотрел на hideme) - все испробованные говно и все не работают.

Добавлено через 51 минуту
Вот еще проверил на своем сервере - через http прокси:

Python
1
2
3
4
5
6
7
8
9
10
>>> source = "test " * 100
>>> requests.post("https://fasttranslator.herokuapp.com/api/v1/text/to/text",data={"lang": "en-ru", "source":source} , timeout=(1,1),proxies={'http':'http://45.14.173.90:80'}).json()
{'status': 200, 'message': 'OK', 'mime_type': 'text/plain', 'data': 'тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест', 'lang': 'en-ru', 'src_size': 499}
 
>>> # а вот здесь сервер не успевает отдать ответ за 100 ms и клиент получает read timeout error
>>> requests.post("https://fasttranslator.herokuapp.com/api/v1/text/to/text",data={"lang": "en-ru", "source":source} , timeout=(1,0.1),proxies={'http':'http://45.14.173.90:80'})
Traceback (most recent call last):
...
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='fasttranslator.herokuapp.com', port=443): Read timed out. (read timeout=0.1)
>>>
Есть рабочий https прокси-сервер?
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
24.03.2022, 19:11  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Насчет aiohttp ничего не понял.
149.28.82.107 - вот проблематичный адрес, там на 80 порту раньше стоял прокси, а сейчас там просто http серв. Так вот aiohttp на этот код
Python
1
2
3
4
5
6
import asyncio
import aiohttp
 
async with aiohttp.ClientSession() as session:
    async with session.get("http://google.com", proxy="http://149.28.82.107:80", timeout=5) as resp:
        print(resp)
выдаёт вот это

Python
1
2
<ClientResponse(http://google.com) [200 OK]>
<CIMultiDictProxy('icy-notice1': '<BR>This stream requires <a href="http://www.winamp.com">Winamp</a><BR>', 'icy-notice2': 'SHOUTcast DNAS/posix(linux x86) v2.5.5.733<BR>', 'Accept-Ranges': 'none', 'Access-Control-Allow-Origin': '*', 'Cache-Control': 'no-cache,no-store,must-revalidate,max-age=0', 'Connection': 'close', 'icy-name': 'Barbwires Premier HD Radio', 'icy-genre': 'Barbwires MetalRock Radio', 'icy-br': '320', 'icy-sr': '48000', 'icy-url': 'http://barbwires.com', 'icy-pub': '0', 'Content-Type': 'audio/mpeg', 'X-Clacks-Overhead': 'GNU Terry Pratchett')>
это ответ от самого сайта который там теперь стоит, а не от гугла через этот "прокси" как предполагалось.

Добавлено через 4 минуты

Не по теме:

Что происходит, уже второй раз половина сообщения не отправляется


Цитата Сообщение от Garry Galler Посмотреть сообщение
Какая ошибка в конечном итоге выдается на клиенте?
Python
1
ConnectionError: HTTPConnectionPool(host='149.28.82.107', port=80): Read timed out.
Но я её получаю только если ставлю маленький таймаут, например 0.5, тогда ошибка появляется секунд за 20-30, а если указать 1 сек то я её уже не дожидаюсь, и там точно больше 10 мин.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.03.2022, 19:13
Цитата Сообщение от Matrix3007 Посмотреть сообщение
там на 80 порту раньше стоял прокси, а сейчас там просто http серв.
Так если он больше не прокcирует запросы, почему он должен роутить твой запрос на гугл?
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
24.03.2022, 19:14  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Я так понял (по некоторым issue на github) что проблема есть только при использовании https прокси.
Я тоже читал эту ветку, это странно, но у меня именно http прокси (этот адрес заявлен как http и в параметрах запроса я его тоже указываю как http).
Вот код, я уже выше кидал
Python
1
2
3
import requests
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"}
a=requests.get("http://google.com", proxies={"http":"http://149.28.82.107:80"}, headers=headers, timeout=1)
Причём важно именно с заголовками, потому что без них он почему-то выдаёт ответ, код 401.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.03.2022, 19:17
Цитата Сообщение от Matrix3007 Посмотреть сообщение
149.28.82.107 - вот проблематичный адрес,
Я на него вообще зайти не могу:

Python
1
2
3
4
5
6
>>> requests.get("http://149.28.82.107:80", timeout=(1,1))
Traceback (most recent call last):
 ...
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='149.28.82.107', port=80): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x0000000003AAD220>, 
'Connection to 149.28.82.107 timed out. (connect timeout=1)'))
>>>
И заголовки не помогают.
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
24.03.2022, 19:17  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Так если он больше не прокcирует запросы, почему он должен роутить твой запрос на гугл?
Мне не обязательно чтоб он роутил, я как раз и пишу чекер чтоб отсеивать невалидные (почему вообще вопросы эти появились, потому что у меня вся проверка одним таким ip стопорится), но остальные либы ожидают именно ответ как от прокси а не просто любой, а aiohttp просто вернул ответ от сайта.
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
24.03.2022, 19:20  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Я на него вообще зайти не могу:
Вот, с браузера открыл
Миниатюры
Как установить read timeout?  
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.03.2022, 19:27
Добавлено через 17 секунд
Цитата Сообщение от Matrix3007 Посмотреть сообщение
Вот, с браузера открыл
У меня не открывается.


Цитата Сообщение от Matrix3007 Посмотреть сообщение
а aiohttp просто вернул ответ от сайта.
Интересное поведение.
Надо подумать. Пока пазл понимания, увы, не складывается...
Я так понимаю у тебя примерно такой чекер:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
file = open('proxies.txt', 'r')
proxies = file.read().splitlines()
 
for i in proxies:
    try:
        proxy = {
            'https': i
        }
 
        r = requests.get(i, headers = headers, proxies = proxy)
 
 
    except:
        continue
И все-таки мне кажется тут не обойтись без запуска запросов requests в отдельных потоках (лучше в небольшом пуле потоков), которые будут прибиваться через таймер.
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
24.03.2022, 19:40  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Я так понимаю у тебя примерно такой чекер:
Ну только я не считываю сразу весь файл, там потоки прыгают по строкам с определенным шагом и читают отдельно, но в общем да, примерно такой.
Цитата Сообщение от Garry Galler Посмотреть сообщение
И все-таки мне кажется тут не обойтись без запуска запросов requests в отдельных потоках (лучше в небольшом пуле потоков), которые будут прибиваться через таймер.
Это ведь потоки в потоках запускать, а у меня их сотни. Я бы сделал так если бы знал что это не сильно повлияет на производительность, потому что я начал его писать именно чтоб оптимизирован был по памяти и по времени, не знал что с таким столкнусь.

Добавлено через 3 минуты
Цитата Сообщение от Garry Galler Посмотреть сообщение
У меня не открывается.
Этот ip есть в некоторых черных списках за брут и спам (публичные прокси, все дела), возможно из-за этого.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.03.2022, 22:22
Matrix3007,
По поводу этого проблемного IP.
Раз библиотека aiohttp вернула ответ от сервера и этот ответ был страницей самого сайта, а не запрашиваемого ресурса, то все логично.
http клиент не обязан знать что он именно должен вернуть. Он должен вернуть то, что ему прислали на запрос. Любой ответ.
И раз сервер вернул ответ от самого себя, значит он больше не проксирует запросы.
Либо проксирует, но на другом порту.
Вопрос, почему остальные клиенты на этом IP спотыкаются и ждут неизвестно чего, остается открытым.
Но раз у aiohttp не возникает с проблем, то стоит использовать именно этот клиент.
Но вот как отличить ответ обычного http сервера от proxy сервера я не знаю.
Сейчас проверил есть ли в разница в заголовках, но нет. Хотя пишут, что некоторые прокси все-таки добавляют в ответ свои собственные нестандартные заголовки.

Добавлено через 6 минут
В конечном итоге не так уж важно, что чекер даст ложноположительный ответ на этот IP.
Ты ведь все равно через эти прокси будешь запрашивать какие-то конкретные ресурсы.
И правильный программист всегда проверяет при получении ресурса не только статус ответа, но и например html title (или что-то еще), чтобы убедиться что прислано именно то, что ожидалось. Ну я так всегда делал при парсинге...
1
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
25.03.2022, 14:47  [ТС]
Garry Galler, Скорее всего другие либы и не отличают, они просто не могут связататься с "прокси", видимо потому что он не принимает их заголовки, а если бы смогли то так же выдавали бы ответ от сайта. По сути это и происходит, например если не передавать заголовки, вернётся ошибка 401, но по заголовкам станет понятно что это ответ именно от того сайта а не от гугла:
Python
1
2
>>> requests.get("http://google.com", proxies={"http":"http://149.28.82.107:80"}).headers
{'icy-notice1': '<BR>SHOUTcast DNAS/posix(linux x86) v2.5.5.733<BR>', 'icy-notice2': 'The resource requested is currently unavailable<BR>', 'Connection': 'close'}
А отличать от http сервера можно сравнением с гугловскими заголовками, я-то делаю все проверки через гугл. Неприятно только что какие-то прокси могут точно так же не захотеть принимать заголовки aiohttp и он так же как и остальные либы зависнет (хотя может у него и работают таймауты, но это только со временем станет понятно). Ну а так да, жить можно.

Добавлено через 1 час 10 минут
Цитата Сообщение от Matrix3007 Посмотреть сообщение
а если бы смогли то так же выдавали бы ответ от сайта
Только что заметил что такие случаи уже были и я их считал за гуды, потому что проверял только код ответа)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
25.03.2022, 16:59
Matrix3007,
А вот этот http client - встроенный в Python - не пробовал?
(я его так ни разу и не использовал...)

Python
1
2
3
4
5
6
7
8
9
10
11
import http.client
# для https proxy - HTTPSConnection
proxy_ip, proxy_port = "localhost", 80
conn = http.client.HTTPConnection(proxy_ip, proxy_port, timeout = 3)
# непонятно можно ли добавить заголовки именно для прокси
conn.set_tunnel("www.python.org")  # конечная точка запроса
conn.request("GET", "/index.html", headers={заголовки для конечной точки})  #  часть url -  запрашиваемый ресурс или "/"
r = conn.getresponse()
print(r.status, r.reason)
print(r.read())
conn.close()
Добавлено через 3 минуты
Цитата Сообщение от Matrix3007 Посмотреть сообщение
они просто не могут связататься с "прокси", видимо потому что он не принимает их заголовки
Если бы сервер не принимал какие-то заголовки - коннект то все равно был бы установлен.
Сервер не может проанализировать заголовки не установив подключение.
Просто ответом от сервера было бы что-то типа 403 Forbidden или 401 Unauthorized. Я, например, так настроил nginx для клиентов с неподходящими параметрами. Но соединение то nginx с клиентом все равно устанавливает.
Если же коннекта с сервером вообще нет (то есть не состоялось традиционное TCP рукопожатие между клиентом и сервером: один руку протянул для приветствия, а второй нет; либо серверу был отправлен пакет, а он не отправил подтверждения о принятии) - будет ошибка connect timed (через установленное время).
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
25.03.2022, 17:36  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
А вот этот http client - встроенный в Python - не пробовал?
Python
1
BadStatusLine: Invalid Password
Цитата Сообщение от Garry Galler Посмотреть сообщение
# непонятно можно ли добавить заголовки именно для прокси
А их вроде нигде нельзя добавить, я когда через requests шлю у него ответ зависит от заголовков которые по идее предназначались для гугла, получается они и для прокси и для конечной точки
Цитата Сообщение от Garry Galler Посмотреть сообщение
Если бы сервер не принимал какие-то заголовки - коннект то все равно был бы установлен.
Так он и был установлен, он ведь поэтому и зависает, в ином случае сработал бы коннекшн таймаут. Просто почему-то он решает ничего не отвечать, хз.
Цитата Сообщение от Garry Galler Посмотреть сообщение
Просто ответом от сервера было бы что-то типа 403 Forbidden или 401 Unauthorized
Оно и есть, вот:
Python
1
2
>>> requests.get("http://google.com", proxies={"http":"http://149.28.82.107:80"}, timeout=1)
<Response [401]>
Но это только если убрать свой юзерагент, иначе виснет.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
25.03.2022, 19:33
Цитата Сообщение от Matrix3007 Посмотреть сообщение
BadStatusLine: Invalid Password
Raised if a server responds with a HTTP status code that we don’t understand.

То есть сервак ответил кодом, которого вообще нет в списке HTTP кодов.
Своим собственным и добавил message - Invalid Password. Похоже, что сервер требует пароля.
А requests как я понял именно это и возвращает: <Response [401]> То есть хочу авторизации.

Цитата Сообщение от Matrix3007 Посмотреть сообщение
Просто почему-то он решает ничего не отвечать, хз.
Заголовки и тело ответа могут считываться не одномоментно.
Сервер может отослать заголовки, но на тело положить болт, а клиент будет по каким-то основаниям все-таки ждать его.
И read timeout в этом случае может не отработать. Так как кой-чего все-таки прислали.
Можно вообще пробовать запрашивать только заголовки (и код ответа) запросом HEAD вместо GET.

P.S. Как-то для одного спамерского IP я делал такой фокус - ставил ему таймер при ответе. То есть его клиент тоже тупо зависал на некоторое время, а потом мой сервер просто закрывал соединение без всякого ответа :-)
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
25.03.2022, 20:37  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Похоже, что сервер требует пароля.
А requests как я понял именно это и возвращает: <Response [401]> То есть хочу авторизации.
Но aiohttp пароль почему-то не понадобился Правда я сейчас ещё заметил что в принципе не могу с ним получить тело ответа, только заголовки.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
25.03.2022, 21:22
Прочитал в базе документации developer.mozilla.org как работает авторизация на прокси:
Для установки таких соединений через proxy используются другие заголовки:
Proxy-Authenticate - от сервера - с указанием нужной схемы аутентификации
Proxy-Authorization - от клиента - с нужными данными

И http ответом на необходимость авторизации будет не 401, а 407.

Так что значит это вовсе не прокся отвечает.

Попробуй все-таки вместо GET использовать HEAD.
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
28.03.2022, 12:57  [ТС]
Garry Galler,
Python
1
2
3
4
5
6
>>> a=requests.get("http://google.com", proxies={"http":"http://149.28.82.107:80"}, timeout=1)
>>> print(a, a.headers)
<Response [401]> {'icy-notice1': '<BR>SHOUTcast DNAS/posix(linux x86) v2.5.5.733<BR>', 'icy-notice2': 'The resource requested is currently unavailable<BR>', 'Connection': 'close'}
>>> a=requests.head("http://google.com", proxies={"http":"http://149.28.82.107:80"}, timeout=1)
>>> print(a, a.headers)
<Response [200]> {'icy-notice1': '<BR>This stream requires <a href="http://www.winamp.com">Winamp</a><BR>', 'icy-notice2': 'SHOUTcast DNAS/posix(linux x86) v2.5.5.733<BR>', 'Accept-Ranges': 'none', 'Access-Control-Allow-Origin': '*', 'Cache-Control': 'no-cache,no-store,must-revalidate,max-age=0', 'Connection': 'close', 'icy-name': 'Barbwires Premier HD Radio', 'icy-genre': 'Barbwires MetalRock Radio', 'icy-br': '320', 'icy-sr': '48000', 'icy-url': 'http://barbwires.com', 'icy-pub': '0', 'content-type': 'audio/mpeg', 'X-Clacks-Overhead': 'GNU Terry Pratchett'}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2022, 12:57
Помогаю со студенческими работами здесь

HttpListener, как установить Timeout ?
Как можно установить максимальный таймаут для запросов в HttpListener? (Все запросы которые не успели быть выполненными уходят с кодом 429...

Ошибка 'Read Timeout'
Здравствуйте, делаю сетевую программу работающую через компоненты Indy, собственно при компиляции клиентской части вылетает ошибка таймаута...

[ffmpeg] как установить timeout ожидания ?
Требуется узнать, есть ли udp multicast поток или нет (поток IPTV). Хочу попробовать сделать это через ffmpeg, но проблема в том, что если...

Dalay в программе.Как установить заданный timeout?
Dalay в программе... Как установить заданный timeout?

Socket read timeout. Не подключается к БД Oracle
Всем доброго времени суток, может кто сталкивался, помогите. В общем есть годовалый продакшен проект, в нем выполняются подключения к БД...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru