Herman
а что значит
Herman
Следующие чаты заблокированы для API: 212.22.93.185, 84.201.180.7, 93.158.240.85.
Herman
?
Alexander
вообще, молодец, что сделал. но читать что там написано совсем не хочется)
Alexey
а что значит
Это были сервисы, которые хотели использовать мое API не совсем по назначению. Ну всякие спамеры...
Alexander
мой совет, если ты пытаешься это в портфолио засунуть, то скопируй с чего-нибудь дизайн и убери эти бегущие строки, фона, шрифты и прочее. просто люди смотреть не будут
Alexey
Дизайн это моя боль. Но я ни разу ни фронтендер. Когда-нить я закажу все это переделать нормальному верстальщику. Пока это не совсем важно. Главное - API. Оно работает.
Herman
я смотрю там ссылка на линкедин, но чет не очень понял, что происзодит при переходе
в любом случае можно попробовать создать страничку компании в линкедине FastTranslator и себе в опыт засунуть типа 8 месяцев работал там
Herman
и так магическим образом для хров ты превращаешься в джуниор+
Alexander
ну смотри сам. мне слабо представляется, что кому-то захочется в этом разбираться. а скопировать шаблон верстки не трудно
Alexey
Ссылка на линкедин? Да не - это просто стандартные кнопки для соц. сетей и ничего больше.
Alexander
одно дело, когда это тебе нужно. а другое дело, когда это тебя просят посмотреть
Alexey
Herman
ну я нажал и случилось что-то странное
Alexey
ну я нажал и случилось что-то странное
Так это просто кнопки для тех, кто захочет попиарить сервис в соц. сети, в которой зарегистрирован. И не более. У самого сервиса есть страничка толька на фейсбуке.
Herman
ну это скорее вопрос к майкрософту
Herman
что это за юай
Alexander
скинь кстати еще ссылку на свою хттп обертку, погляжу
Alexey
"что это за юай" В web морде сервиса только bootstrap - насколько я его осилил.
Herman
Alexey
не, я про линкединовский
Тогда я тоже не понял... Я же говорю - я просто кнопки со ссылками на соц. сети готовые прикрепил к страничке и все.
Alexander
то есть это обертка над go-cleanhttp. там есть нюанс:
ForceAttemptHTTP2: true,
у меня некоторые урлы ошибками сыпали, когда без этой фичи такого не было
&net.Dialer{
Timeout: 30 * time.Second,
что-то очень люто для установки tcp соединения
Alexey
"Что-то очень люто для установки tcp соединения" То есть многовато? Ну в этом моем клиенте там еще очень много чего дорабатывать - сделать опять же разумные дефолты и т.д. На нижнем слое там да чистый клиент от hashicorp с их дефолтами.
Anonymous
Anonymous
что там лютого может быть?
Alexander
Уже по твоей либе:
func Default() (cl *StandardClient) {
return &StandardClient{
Client: &http.Client{},
Не знаю зачем нужен клиент без таймаутов - я бы выпилил вообще
func (client *StandardClient) Error() error {
return client.err
}
net/http клиент потокобезопасный, твой получается уже нет. Люди могут перепутать
func (client *StandardClient) With(options ...interface{}) *StandardClient {
Дальше идет рефлексия, а еще можно передать мусор, который ни на что не повлияет. Я бы сделал что-нибудь чтобы можно было вызывать по типу:
.With(www.OptTimeout(time.Second), www.OptCookie(cookiejar.))
Но не очень имеет смысл вообще этот метод, только если выкинуть остальные With
Не нравится что урл не методом WithURL передается, а как аргумент Get, Post и тд
Alexey
"Не нравится что урл не методом WithURL передается," Ок, принял. Ну таково было мое видение интерфейса на момент попыток сделать из кучи просто функций что-то осмысленное.
Alexander
func (r *Request) Json(data interface{}) *Request {
func (r *Request) JSON(data interface{}) *Request {
Очень удобно.
Alexander
Еще у клиента нет проброшенного метода CloseIdleConnections. Я в своей обертке делаю метод Close, где как раз его зову
Alexander
очень нужно, если ты используешь клиент для краулинга
Alexander
у меня еще вопрос, твой клиент для чего-то кроме АПИ использовался?
Alexander
Меня очень смущает вот это раскодирование gzip:
Alexander
https://github.com/GarryGaller/go-www/blob/867ab348d4c932bef46233e440a647e8f4675e28/response.go#L120
Alexey
Насчет потокобезопасности - Cleaned() client от hashicorp должен быть горутинобезопасным или я ошибаюсь? "Еще у клиента нет проброшенного метода CloseIdleConnections" - ну видимо я до этого уровня осмысления клиентских соединений не дошел - это нужно разбираться.
Alexey
"для чего-то кроме АПИ использовался?" Нет.
Alexander
Стандартная библиотека по документации сама должна добавлять Accept-Encoding: gzip и http.Body в таком случае не надо раскодировать самому, если в заголовках Content-Encoding: gzip. Насчет того убирает ли оно для тебя этот заголовок или нет, я не в курсе. Видимо да, если работает. НО! Это если ты сам не выставил заголовок Accept-Encoding
Alexey
С GZIP примерно так же я видел в других либах работают. Это было очень давно уже добавлено в код сервиса для клиентских запросов. И , возможно, как ты говоришь это уже и не нужно. Но мной было упущено - нужно еще раз исходники net/http просмотреть.
Alexander
И короче говоря, есть сайты, которые плюют на твой Accept-Encoding и шлют закодированный контент тем способом, который решили. Я очень долго ограничивался "gzip, deflate", естественно уже оборачивал body в нужный reader. Но оказалось, например, что куча страниц которые я по майму пометил как архивы были закодированы brotli (он же br в заголовке)
Alexander
я бы хотел, например, чтобы клиент решал сам проблемы с разными вариантами content-encoding. И да, бротли тяжелее по процу, но и сжимает лучше
Alexander
опять же вспомнил, а как в твой клиент подсунуть прокси?
Alexander
неплохо бы еще ограничение по размеру контента, допустимые майм типы (скачали нужное кол-во байт, определили и делаем вывод качать дальше или нет)
Alexey
Для прокси будет метод SetProxy 😊 (когда руки дойдут - хотел сделать подачу сразу списка в виде deque )Пока же стандартными средствами как в обычном клиенте.
Alexander
не нравится ReadAll еще и потому, что неплохо бы например иметь возможность под чтение body использовать пул слайсов байт. чего собственно и нет
Alexander
а это неплохо экономит аллокации
Alexander
взял из пула слайс байтов для респонса, прочитал в него, как-то обработал - вернул в пул
Alexey
" под чтение body использовать пул слайсов" ну это все в fasthhtp реализовано. Я еще на него хотел высокоуровневую обертку как-нибудь сделать. Так как свой интерфейс у него сложный.
Alexander
остальное уже смотреть не буду
Alexander
вот fasthttp для апишек подходит лучше, для краулинга не очень, так как ограниченный функционал и не очень удобно
Alexander
ну опять же, если реализовано там, ничего не мешает прикрутить к net/http такое для чтения body, тут хотя бы можно в отличие от заголовков
Alexey
"вот fasthttp для апишек подходит лучше," Ну да - сам автор так и писал про него. Но у меня его заюзать пока руки не дошли. Хотя сам сервис у меня на fiber :-)
Alexander
cookiejar хотелось бы по умолчанию кстати видеть
Alexey
cookiejar хотелось бы по умолчанию кстати видеть
Чтобы изначально уже был? Ну, да можно - чтоб куки от сайта сразу принимались. Короче, после того как я глянул код реально продвинутых клиентов - того же go-resty - я понял что расти в своих попытках изобрести велосипед дофига куда есть. Но go-resty 80 разрабов пилили....
Alexander
ну они и принимаются, если в клиент добавить джар
Alexander
ну тут да, еще два подхода получается нужно реализовывать или придерживаться одного: апи, веб
Alexey
Но в любом случае спасибо за критику. Пока вот рефакторингом своего сервиса занимаюсь, клиентом уже позже буду заниматься.
Alexey
Насчет CloseIdleConnections - это нужно делать для стандартного ("голого") http.Client{}по умолчанию, так как он расшаренный по транспорту (и в этом его проблема). Если юзать клиента из go-cleanhttp (у меня это Cleaned вариант), то там keep-alive и idle-connections на транспорте отключены. Насчет распаковки gzip - действительно, стандартный клиент делает это автоматически и прозрачно. Но до тех пока как юзер не установил явно на своем request заголовки запрашивающие gzip. P.S. Убрал из своего клиента поле err и метод Error, его возвращающий, так там это было вообще не нужно.
Alexey
Посмотрел как сделано в go-resty: увы, проверяется только сжатие gzip-ом и все. Надо бы им написать, чтобы добавили поддержку распаковки других протоколов сжатия.
whois
Ребят, посоветуйте пожалуйста способ проверить, что объект-1(тип time.Time) находится в интервале между двумя датами(тип time.Time)?
Emil
Хз про одну функцию, но мб проверить на before и after?
Emil
Люди, у меня бот рандомно вырубается иногда, как можно понять, что не так? Вот вообще, все ошибки должны в чат вывод делать или в консоль, а он тихо так
getUpdates req : map[offset:[70186957] timeout:[600]]
feedback_1 | 2021/11/16 21:03:52 getUpdates resp: []
Не ловит проверочный реквест и умирает. Не знаете, в чем может быть проблема?
Emil
Звучит страшно)
Посмотрю
Emil
Другой то бот уже долго без перебоев
Emil
Не знаю, как лучше описать, он просто как-то когда-то падает довольно редко
Emil
Бот обратной связи
Пересылает сообщения из своего чата в суперчат
Связь чатов через ключ значение айди сообщения - айди пользователя в редисе , которые хранятся день
Ещё банить умеет, но до этого не доходили
Работает все, просто без объявления войны умирает когда-то и я не могу это даже повторить руками
Maks
В консоле паника какая то должна же быть
Maks
У тебя он в скрине запущен? Или просто в бэке?
Emil
Да
Emil
Просто выключается
Emil
У тебя он в скрине запущен? Или просто в бэке?
В конце перед смертью в консоле только проверка на ответ и пустой ответ как сверху
Он запущен просто на сервере у друга)
Но другой бот без перебоев
Правда хз на том же сервере или нет...
Emil
Из-за памяти? Не мог он столько же на ключ значениях набрать(?)
Maks
Там горутины?
Maks
Может он падает в горутинах и мейн закрывается раньше чем паника выводится
Maks
Такое возможно?
Maks
И из за этого не ясна ошибка
Maks
Или где то просто стоит команда os.exit
Maks
В случае ошибки
Maks
Или где то лог фатал)
Maks
Что тоже является выходом из прилы