node.js бьет бинарные данные, картинки при скачивании-отправке по http из-за кодировки по умолчанию

Ссуки разработчики node.js…

Короче, пишу свой прокси-сервер на node.js (это все равно пригодится, но и просто прокси свое применение имеет, Стас мне давно тему спалил, интересно, живо ли это еще 🙂 )

Прокси на основе методов типа .pipe() мне не подходит – мне надо полные данные через себя пропускать, а так они мимо пройдут. Мне надо скачать данные полностью, обработать и потом отправить.

Написал прокси на сокетах на основе примеров – бьет картинки (скачиваются данные другой длины, чем content-length, причем для маленьких картинок разница меньше, для больших больше)

Переписал на модуле http – все равно бьет, видимость проблемы та же.

Долго ебался, нигде ничего нет про такую проблему…

Причина – что весь ввод-вывод и с сокетами, и с http – имеет указание кодировки, и даже если ты ее не указываешь (опциональный параметр), там внутри есть какая-то кодировка по умолчанию, и она по умолчанию что-то делает, сука!

То есть, все картинки этой кодировкой обрабатываются как-то и портятся. И это отдельный вопрос, что за хуйня – одна кодировка? Тогда должно быть две – кодировка до и после.

Как лечить проблему с кодировкой node.js

Ставим кодировку ‘binary’ – если скачиваем, то до получения данных надо писать что-то вида

var req = http.request(options, function (res) {

res.setEncoding('binary');

А когда отправляешь картинку, надо второй параметр добавлять, вида

response.write(data,'binary');

И оно перестанет лазить в данные, а так било еще и кодировку html, просто я не сразу заметил, сперва на картинках увидел.

И блять нигде никогда на советах примерах всяких stackoverflow.com и документациях этого нет, что эта работа с кодировкой включена по умолчанию и она все данные портит.

Как это вообще? англоязычным ладно, пофиг на кодировки, но картинки? они приводят такие спокойно примеры кода, которые битые данные берут и отправляют…

оно же на Хабре – тут https://habrahabr.ru/post/326428/

Против спама форм, комментариев рецепт (не капча!)

Про всё, отправку сообщений и заявок, итд. Рецепт простой, я им всегда пользуюсь, понятно, что это со временем должно усложниться.

Короче, все куки, посылаемые в HTTP-заголовках, спам-машины давно поддерживают.

А вот куки, которые устанавливаются на странице яваскриптом, пока еще нет. Понятно, почему – исполнять весь js запариться можно, и результат может зависеть от действий пользователя.

Так что сейчас я тупо на все страницы ставлю js код вида

<script>document.cookie="cookiename=cookievalue;";</script>

А потом значение сессионного куки либо проверяю в скрипте формы, если скрипт сам пишу, либо не пускаю запоститься, если чужой движок, вот для вордпресса например добавка в .htaccess

RewriteEngine on
RewriteCond %{REQUEST_METHOD}  =POST
RewriteCond %{REQUEST_URI} wp-comments-post.php$
RewriteCond %{HTTP_COOKIE} !cookiename=cookievalue
RewriteRule (.*)$ nahooy.html [L]

(это все POST запросы в скрипт комментариев на ВП без нужной куки посылаются нахуй)

Результат – весь спам в форму как отрезало, но немного все же проходит, я думаю, либо руками спамят, либо хьюман-эмулятором, если он еще жив.

И – без капчи.