Skip to content

Instantly share code, notes, and snippets.

@pirj
Created April 29, 2014 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pirj/11408734 to your computer and use it in GitHub Desktop.
Save pirj/11408734 to your computer and use it in GitHub Desktop.
Пишем HTTP proxy сервер с плагинами / Хабрахабр
<!DOCTYPE html>
<!-- saved from url=(0032)http://habrahabr.ru/post/111569/ -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width = 1080">
<title>Пишем HTTP proxy сервер с плагинами / Хабрахабр</title>
<meta name="yandex-verification" content="67d46b975fa41645">
<meta name="description" content="Одно время всплыла тема, что в одной из онлайн-игр появилась такая довольно досадная штука, как каптча. Само по себе, отвлекаться от игры для ввода каптчи может обернуться не слишком хорошими...">
<meta name="keywords" content="lua, http, proxy, online games, recaptcha">
<meta property="fb:app_id" content="444736788986613">
<meta property="og:type" content="article">
<meta property="og:url" content="http://habrahabr.ru/post/111569/">
<meta property="og:title" content="Пишем HTTP proxy сервер с плагинами">
<meta property="og:image" content="http://img718.imageshack.us/img718/4941/imagejdl.jpg">
<link rel="image_src" href="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/imagejdl.jpg">
<meta property="og:description" content="Одно время всплыла тема, что в одной из онлайн-игр появилась такая довольно досадная штука, как каптча. Само по себе, отвлекаться от игры для ввода каптчи может...">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@habrahabr">
<script type="text/javascript" async="" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/watch.js"></script><script async="" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/analytics.js"></script><script type="text/javascript">function adriver(a,b){};</script>
<link href="http://habrahabr.ru/styles/1398441886/all.css" rel="stylesheet" media="all">
<link href="http://habrahabr.ru/styles/1398441886/_parts/posts.css" rel="stylesheet" media="all">
<link href="http://habrahabr.ru/styles/1398441886/_parts/comments.css" rel="stylesheet" media="all">
<link href="http://habrahabr.ru/styles/1398441886/forms.css" rel="stylesheet" media="all">
<link href="http://habrahabr.ru/styles/1398441886/highlight.css" rel="stylesheet" media="all">
<link href="http://habrahabr.ru/styles/1398441886/printer.css" rel="stylesheet" media="print">
<script src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/all.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/jquery.form.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/jquery.cookie.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/wysiwyg.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/highlight.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/jquery-ui-highlight.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/posts.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/comments.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/all(1).js"></script>
<script type="text/javascript">
var crtg_nid="2580";
var crtg_cookiename="cto_rtt";
var crtg_varname="crtg_content";
function crtg_getCookie(c_name){
var i,x,y,ARRCookies=document.cookie.split(";");
for(i=0;i<ARRCookies.length;i++){
x=ARRCookies[i].substr(0,ARRCookies[i].indexOf("="));
y=ARRCookies[i].substr(ARRCookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if(x==c_name){return unescape(y);}
}
return'';
}
var crtg_content = crtg_getCookie(crtg_cookiename);var crtg_rnd=Math.floor(Math.random()*99999999999);
var crtg_url=location.protocol+'//rtax.criteo.com/delivery/rta/rta.js?netId='+escape(crtg_nid);crtg_url+='&cookieName='+escape(crtg_cookiename);crtg_url+='&rnd='+crtg_rnd;crtg_url+='&varName=' + escape(crtg_varname);
var crtg_script=document.createElement('script');crtg_script.type='text/javascript';crtg_script.src=crtg_url;crtg_script.async=true;
if(document.getElementsByTagName("head").length>0)document.getElementsByTagName("head")[0].appendChild(crtg_script);
else
if(document.getElementsByTagName("body").length>0)document.getElementsByTagName("body")[0].appendChild(crtg_script);
</script><script type="text/javascript" src="http://rtax.criteo.com/delivery/rta/rta.js?netId=2580&cookieName=cto_rtt&rnd=10215173475&varName=crtg_content" async=""></script>
<script>
var N = 5;
var ar_duo1 = Math.floor(Math.random()*N+1);
</script>
<script type="text/javascript" src="http://habrahabr.ru/javascripts/1398441886/adriver.core.2.js"></script>
<link title="Хабрахабр / Комментарии к публикации «Пишем HTTP proxy сервер с плагинами»" type="application/rss+xml" rel="alternate" href="http://habrahabr.ru/rss/post/111569/">
<script type="text/javascript">
var user_type = 'habrauser';
var username = 'philpirj';
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-726094-1', 'auto' );
ga('require', 'displayfeatures');
ga('set', 'dimension1', user_type); // user type - guest/readonly/habrauser
ga('set', 'dimension2', username); // username
ga('send', 'pageview');
</script>
<script type="text/javascript">
var pp_gemius_identifier = new String('p8zr4.NqiIZJgD2cnP2s5fWWnIQFHrAvZ280B955gIr.f7');
</script>
<script src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/gemius.js"></script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter24049213 = new Ya.Metrika({id:24049213,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true});
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript>&lt;div&gt;&lt;img src="//mc.yandex.ru/watch/24049213" style="position:absolute; left:-9999px;" alt="" /&gt;&lt;/div&gt;</noscript>
<!-- /Yandex.Metrika counter -->
<style type="text/css"></style></head>
<body>
<script type="text/javascript">
$(function() {
// возвращает cookie с именем name, если есть, если нет, то undefined
function getBNCookie(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
function setBNCookie(name, value, options) {
options = options || {};
var expires = options.expires;
if (typeof expires == "number" && expires) {
var d = new Date();
d.setTime(d.getTime() + expires*1000);
expires = options.expires = d;
}
if (expires && expires.toUTCString) {
options.expires = expires.toUTCString();
}
value = encodeURIComponent(value);
var updatedCookie = name + "=" + value;
for(var propName in options) {
updatedCookie += "; " + propName;
var propValue = options[propName];
if (propValue !== true) {
updatedCookie += "=" + propValue;
}
}
document.cookie = updatedCookie;
}
var bntop = $('.apps_bn');
var vbn = parseInt(getBNCookie('vbn')) || 0;
if (vbn < 3)
{
bntop.show();
setBNCookie('vbn', vbn + 1, { expires: 31556926, path: '/', domain: 'habrahabr.ru' });
}
if (/Android/i.test(navigator.userAgent))
{
$('.app_android', bntop).show();
}
else if (/iPhone/i.test(navigator.userAgent))
{
$('.app_iphone', bntop).show();
}
else if (/IEMobile|MSIE/i.test(navigator.userAgent))
{
$('.app_wp', bntop).show();
}
else
{
$('.app_anything', bntop).show();
}
});
</script>
<div class="apps_bn">
<div class="app_iphone">
<a href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=1&ad=463784&bt=21&pid=1620360&bid=3322408&bn=3322408&rnd=1514420851" target="_blank"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/app_ios.jpg" alt="Приложение в твоем смартфоне"></a>
</div>
<div class="app_wp">
<a href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=1&ad=463784&bt=21&pid=1620360&bid=3322414&bn=3322414&rnd=717208825" target="_blank"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/app_wstore.jpg" alt="Приложение в твоем смартфоне"></a>
</div>
<div class="app_android">
<a href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=1&ad=463784&bt=21&pid=1620360&bid=3322404&bn=3322404&rnd=1516395565" target="_blank"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/app_googleplay.jpg" alt="Приложение в твоем смартфоне"></a>
</div>
<div class="app_anything" style="display: block;">
<a href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=1&ad=463784&bt=21&pid=1620336&bid=3322335&bn=3322335&rnd=586566606" target="_blank"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/habraapps.jpg" alt="Приложение в твоем смартфоне"></a>
</div>
</div>
<div class="wrapper">
<div id="layout">
<div id="header">
<div class="userpanel silver">
<div class="top">
<a href="http://habrahabr.ru/users/philpirj/" class="username dark">philpirj</a>
<a href="https://habrahabr.ru/auth/settings/" class="nav-settings">настройки</a>
<a href="http://habrahabr.ru/logout/philpirj/98284283/">выйти</a>
</div>
<div class="bottom">
<a href="http://habrahabr.ru/tracker/">трекер</a>
<a href="http://habrahabr.ru/tracker/" class="count">+240</a>
<a href="http://habrahabr.ru/conversations/">диалоги</a>
<a href="http://habrahabr.ru/users/philpirj/favorites/">избранное</a>
</div>
<div class="charge" id="charge_string">
У вас 137 голосов за карму/топики и 275 за комментарии
</div>
</div>
<a class="logo " href="http://habrahabr.ru/feed/posts/" title="На главную страницу"></a>
<div class="search">
<form id="search_form" name="search" method="get" action="http://habrahabr.ru/search/">
<input type="submit" value="">
<input type="text" name="q" x-webkit-speech="" speech="" tabindex="1" autocomplete="off">
</form>
</div>
<div class="main_menu">
<a href="http://habrahabr.ru/feed/posts/">лента</a><a href="http://habrahabr.ru/posts/top/" class="active">посты</a><a href="http://toster.ru/?_aa=press_anykey">q&amp;a</a><a href="http://habrahabr.ru/events/coming/">события</a><a href="http://habrahabr.ru/hubs/">хабы</a><a href="http://habrahabr.ru/companies/">компании</a>
<div class="banner_special">
<div id="adriver_banner_318167982"></div>
<script type="text/javascript">
$(function(){
var keyword = '';
if (typeof crtg_content !== 'undefined' && crtg_content) { keyword = crtg_content; }
var custom = {4:ar_duo1};
custom[1] = 'programming';
new adriver("adriver_banner_318167982", {sid: 176776, bt: 52, bn: 4, custom: custom, keyword: keyword});
}());
</script>
</div>
</div>
</div>
<div class="content_left">
<div class="post shortcuts_item" id="post_111569">
<div class="published">10 января 2011 в 16:56</div>
<h1 class="title">
<span class="post_title">Пишем HTTP proxy сервер с плагинами</span>
<a href="http://habrahabr.ru/sandbox/" class="flag flag_sandbox" title="Перейти в песочницу">из песочницы</a>
<a title="Редактировать пост" class="edit" href="http://habrahabr.ru/topic/edit/111569/"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/topic_edit.gif" width="16" height="16" alt="Редактировать"></a>
</h1>
<div class="hubs">
<a href="http://habrahabr.ru/hub/programming/" class="hub subscribed" title="Вы подписаны на этот хаб">Программирование</a><span class="profiled_hub" title="Профильный хаб">*</span>
</div>
<div class="content html_format">
<img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/imagejdl.jpg" alt="image">Одно время всплыла тема, что в <a href="http://travian.ru/">одной из онлайн-игр</a> появилась такая довольно досадная штука, как <a href="http://ru.wikipedia.org/wiki/CAPTCHA">каптча</a>. Само по себе, отвлекаться от игры для ввода каптчи может обернуться не слишком хорошими последствиями, особенно, если вводишь её не с первого раза, могут и враги насолить. Но не в этом соль. Особенно плоха вещь для тех, кто использует локальных ботов. Те то, маленькие, спотыкаются об каптчу, и за это игра мнгновенно их штрафует потерей юнитов и ресурсов. Неприятная штука, что говорить.<br>
<br>
Итак, задача:<br>
Хочется, чтобы каптчу вводить не приходилось. Хоть если играешь сам, хоть если играет за тебя бот, если ты спишь.<br>
Дополнительное условие: 40 часов времени (ибо паника на корабле).<br>
Желательное условие: установочный файл под Windows.<br>
Ещё одно желательное условие: результат должен занимать не более мегабайта.<br>
<a name="habracut"></a><br>
<br>
Скажу сразу, что я не игроман, и даже наоборот, являюсь некоторым противником онлайн игр, и для внесения в эту отрасль дополнительной энтропии и решил взяться за это дело. Дело, возможно, могло принести определённую прибыль на волне появления каптчи и паники, связанной с этим, но не принесло по определённым причинам.<br>
<br>
Итак, что же делать?<br>
<br>
<h5>Попытка 1</h5><br>
Написать системную тулзу, которая бы перехватывала HTTP запросы и ответы от всёх установленных программ, и фильтровала бы те ответы, на которые бы требовалось ввести каптчу, вводя её самостоятельно. Над программой, которая в том числе должна была решать и эту задачу корпели примерно полгода два белорусских программиста, меняя платформу с C на C#, и потом на Java, и мирясь с тем, что им может понадобится установленный на машину OpenSSL. Задача каждый раз обрастала ненужными подробностями. Ну, в целом, не вышло.<br>
<br>
<h5>Попытка 2: Сам, всё сам</h5><br>
<br>
Вполне понятно, что способов не так много, и выбор встал только между SOCKS прокси и HTTP прокси. Через некоторое время стало понятно, что SOCKS прокси поддерживают далеко не все пользовательские приложения, и выбор стал однозначным.<br>
<br>
<h6>Выбор платформы</h6><br>
Выбор был не сложен, особенно учитывая попытку 1. C и C# были быстро отметены, учитывая полное отсутствие опыта. Были выявлены следующие, богатые необходимыми библиотеками, платформы:<br>
<br>
<b>Java</b> Тяжело предположить, что для установки такой маленькой утилитки пользователи бы захотели устанавливать JVM, весящий страшно сказать сколько десятков мегабайт. Java отвалилась.<br>
<br>
<b>Python</b> Как известно, работает везде и всё включено (batteries included). Весит 7Мб. По современным меркам, конечно, немного, но всё же хотелось компактнее. Остался вопрос, как этот инсталлятор внедрить в инсталлятор моей утилиты. Не знаю, как это делается у питоновских приложений, возможно, намного проще, но инсталлятор в инсталляторе я как-то раз уже делал и больше не хочу.<br>
<br>
<b>Ruby</b> На момент начала моих поисков отсутствовал одношаговый инсталлятор под винду. Целиком и полностью. Сейчас есть, подразумевает установку MinGW, MSYS и прочего, при установке могущего испугать юзера. Вес 7Мб.<br>
Про инсталлятор в инсталляторе вопрос остался.<br>
<br>
<b>Lua</b> Очень давний и популярный среди скриптовщиков С++ игр язык. Вялое community, разрозненные библиотеки. Вес <a href="http://www.murga-projects.com/murgaLua/">кастомной сборки</a> VM в нужными библиотеками — всего 800Кб. Инсталлятор не предоставляется, есть набор exe файлов, которым в качестве параметра передаётся lua скрипт для его запуска. То, что нужно, так ещё и откомпилено под Win, MacOS, Linux, каждое из них в версиях 32 и 64 отдельно. То, что надо.<br>
<br>
Итак, я взялся за изучение <a href="http://www.lua.org/">Lua</a> (сбылось новогоднее пожелание, я изучил новый язык программирования).<br>
Язык обладает чудесными свойствами, такими как:<br>
— sandboxing (в ruby был только <a href="https://github.com/whymirror/sandbox">патч</a> для версии 1.8.5): позволяет запускать сторонний код, ограничивая ему окружение;<br>
— coroutines (типа ruby fibers из 1.9): позволяет сделать очень легковесную кооперативную многозадачность;<br>
— очень простые (точнее, простая — есть только ассоциативный массив) структура данных, которой, как оказалось, хватает, для выполнения большинства задач по обработке данных;<br>
… ещё много всего, тяжко так в одном посте.<br>
<br>
Проще всего было сделать такую систему в виде фильтрующего запросы и ответы HTTP прокси сервера, что и было решено сделать (от добра добра не добра).<br>
<br>
Идея проста: повесить сервер TCP, слушать, что клиент просит, разбирать заголовки HTTP, искать HOST, убирать HTTP header «Proxy-Connection», отсылать запрос тому, кому он предназначался, получать ответ, направлять клиенту и т.п.<br>
<br>
Ответ сервера нужно фильтровать, и делать это можно, если сервер не применяет HTTPS, а он по счастью его не применяет. Сделать это оказалось довольно просто, достаточным оказалось написать сокращённый до 190 строк Lua аналог <a href="http://mechanize.rubyforge.org/">mechanize для Ruby</a>, который делает с заголовками и телом запроса что ни взбредёт в голову, позволяя писать какие хочется фильтры для HTTP запросов.<br>
<br>
Ну, в этом случае нам надо было избавиться от вредной <a href="http://www.google.com/recaptcha">reCAPTCHA</a>, для чего всего лишь потребовалось определить:<br>
— к странице ли травиана щёл исходный запрос (и запрашивалась ли страница HTML):<br>
<code>string.find(request.uri(), 'travian') and mimetype and string.find(mimetype, 'text/html')<br>
</code><br>
— содержалась ли на результирующей странице каптча вместо «полезных» игровых данных:<br>
<code> local captcha, captcha_key = string.match(response.body(), '&lt;iframe src="(http://api.recaptcha.net/noscript??(k=[%a%d_]+&amp;lang=en))')<br>
</code><br>
<br>
Как разгадывать собственно каптчу (с помощью не слишком современных и высокопроизводительных индусов, но чрезвычайно дешёвых живых индусов) немного выходит за рамки нашей сугубо технической темы, поэтому где-нибудь в другом месте.<br>
<br>
В итоге, скачивалась картинка каптчи, отправлялась индусам (2 раза на всякий случай), полученные через 5-10 секунд ответы сравнивались, и если они были одинаковыми, то результат отправлялся травиану HTTP POST запросом, на что жертва выдаёт страницу, радостно сообщая, что мы, оказывается, человек, и кучу «полезных» игровых данных. Эту страницу мы и показываем ничего не подозревающему клиенту, который мог заметить лишь некоторую паузу. В пессимистичном случае несовпадения картинка отправлялась индусам ещё раз, и так далее до того момента, пока не получалось хотя бы два одинаковых решения, остальные отправлялись в службу поддержки на возврат денег (практически никакой халявы для индусов).<br>
<br>
Итак, вот оно, решение и есть.<br>
<br>
Однако, случилось то, о чём никто не мог предполагать. Пользователям зачем-то понадобился ещё и доступ к другим сайтам, немыслимо! Среди них оказались даже сайты, доступ к которым осуществлялся через HTTPS, и с этим нужно было что-то делать без регулярных переключений прокси включён-выключен.<br>
И ещё нужно было, чтобы несколько запросов принимались одновременно. Неприятным оказалось то, что google analytics иногда делает запрос, длящийся минуты, оставляя однопоточную прокси в режиме ожидания.<br>
<br>
Ну что же, для этого нашлось целых три разных библиотеки для создания асинхронного TCP сервера. То есть — ждём входящее соединение, получаем кусок данных, передаём управление диспетчеру, смотрим есть ли ещё входящие соединения или открытые соединения для которых есть данные (select/kpoll/epoll), передаём управление по очереди.<br>
<br>
Увы и ах, поскольку все такого рода соединения происходят на локальной машине, то всё это происходит почти мнгновенно. А медленные соединения — исходящие. Подковырять существующие библиотеки (<a href="http://keplerproject.github.com/copas/">copas</a>, <a href="http://ztact.com/software/asok.lua">asok</a>), которые предназначены для мультиплексирования входящих соединений, оказалось сложнее, чем писать свою. И я написал небольшую (272 строки) <a href="https://github.com/pirj/proxy/blob/master/async.lua">свою</a>. Помимо того, что все входящие и исходящие соединения работают асинхронно, так можно добавлять ещё любые корутины (поправьте меня, люди с профильным образованием) в пул, работающий в общем цикле.<br>
<br>
Ну вот, всё стало работать параллельно, а по скорости лишь незаметно отставать от того, как это работает без прокси.<br>
<br>
Как же велико было моё удивление, когда я получил от сервера страницу с (в том числе) заголовками:<br>
Content-Encoding: gzip<br>
Transfer-Encoding: chunked<br>
и собственно полные кракозябры в качестве тела ответа.<br>
<br>
Первая мысль была отключить в запросе Accept-Encoding, чтобы сервер не пытался паковать данные, и переделать HTTP 1.1 в HTTP 1.0, чтобы не посылало «чанками». Но подумал об падении скорости и увеличении трафика, и сжалился над пользователями.<br>
Вышло так:<br>
<code> if headers(pipe, target)['Transfer-Encoding'] == 'chunked' then<br>
target.body = dechunk(target.body)<br>
end<br>
<br>
function dechunk(chunkie)<br>
local chunk_size<br>
local chunk<br>
local chunks = {}<br>
chunkie, chunk_size = readline(chunkie)<br>
<br>
while chunk_size and tonumber(chunk_size, 16) &gt; 0 do<br>
chunkie, chunk = readbytes(chunkie, tonumber(chunk_size, 16))<br>
<br>
table.insert(chunks, chunk)<br>
chunkie, chunk_size = readline(chunkie)<br>
if not chunk_size or chunk_size == '' then -- sometimes there's a crlf, sometimes not<br>
chunkie, chunk_size = readline(chunkie)<br>
end<br>
end<br>
<br>
return table.concat(chunks)<br>
end<br>
</code><br>
<br>
Ушёл читать матчасть. Слава богу, по этим пунктам документации порядочно.<br>
Склеиваем «чанки», получаем gzip файл (иногда deflate, но мне не встречался пока). Распаковываем (спасибо David Manura за <a href="https://github.com/davidm/lua-compress-deflatelua">библиотеку</a>).<br>
Распаковка вышла ещё проще:<br>
<code> if headers(pipe, target)['Content-Encoding'] == 'gzip' and #target.body &gt; 0 then<br>
local decoded = {}<br>
gzip.gunzip {input=target.body, output=function(byte) table.insert(decoded, string.char(byte)) end}<br>
target.body = table.concat(decoded)<br>
end<br>
</code><br>
<br>
Осталось немного<br>
— сделать HTTPS-туннелирование для HTTPS сайтов (слава богу, OpenSSL бандлить не надо, просто данные прозрачно передавать туда-сюда):<br>
<code> if request.method() == 'CONNECT' then<br>
local sent_to_server, err = client.send("HTTP/1.0 200 Connection established\r\nProxy-agent: BotHQ-Agent/1.2\r\n\r\n")<br>
print('https transparent connection')<br>
https(client, server)<br>
return<br>
end<br>
<br>
local function https(client, server)<br>
close_callback = function()<br>
client.close()<br>
server.close()<br>
end<br>
<br>
client.receive_subscribe(function(data)<br>
server.send(data)<br>
end, close_callback)<br>
<br>
server.receive_subscribe(function(data)<br>
client.send(data)<br>
end, close_callback)<br>
end<br>
</code><br>
<br>
— положить в инсталлятор:<br>
В целом приключения с запуском <a href="http://7zsfx.info/">7zip sfx</a> на <a href="https://heroku.com/">Heroku</a> стоят отдельного поста. Радость победы затмевает любые сложные моменты разработки.<br>
<br>
Ну что же, не знаю, как вам, а мне было интересно и увлекательно этим заниматься. Не жалею потраченного времени.<br>
<br>
В итоге:<br>
Сам прокси сервер на 71 строку <a href="https://github.com/pirj/proxy/blob/master/proxy.lua">здесь</a>.<br>
Асинхронная библиотека TCP-сервер-клиент на 272 строки <a href="https://github.com/pirj/proxy/blob/master/async.lua">тут</a>.<br>
Некий аналог HTTP клиента на 190 строк.<br>
Фильтр для разгадывания каптчи на 150 строк <a href="https://github.com/pirj/proxy/blob/master/travian.lua">тут</a>.<br>
Установочный файл размером менее мегабайта.<br>
<br>
Уверен, такой штуке найдётся много полезных применений, начиная от не очень хороших, типа спамилок с «автоматической» разгадкой каптчи, до полезных, когда нужно гибко отфильтровать пользовательский трафик скриптом. Приведу простейший скрипт, не позволяющий пользователям, подсоединённым через прокси, соединяться с vk.com:<br>
<code>module(..., package.seeall)<br>
function filter(request, response)<br>
response.set_body('')<br>
end<br>
<br>
function pre(request, response)<br>
return string.find(request.uri(), 'vk.com')<br>
end<br>
</code><br>
<br>
С приближающимся выходом lua 5.2 снимется ограничение на вызов метаметодов из корутин, и библиотеки можно будет сделать более красивыми, например, уйдут методы http.set_body, и многое другое.
<div class="clear"></div>
</div>
<ul class="tags">
<li><a href="http://habrahabr.ru/search/?q=%5Blua%5D&target_type=posts" rel="tag">lua</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5Bhttp%5D&target_type=posts" rel="tag">http</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5Bproxy%5D&target_type=posts" rel="tag">proxy</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5Bonline%20games%5D&target_type=posts" rel="tag">online games</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5Brecaptcha%5D&target_type=posts" rel="tag">recaptcha</a></li>
</ul>
<div class="infopanel_wrapper">
<div class="infopanel " id="infopanel_post_111569">
<div class="voting ">
<span class="plus" title="За свои посты голосовать нельзя. Срок голосования истек."></span>
<div class="mark positive ">
<span class="score" title="Всего 49: ↑34 и ↓15">+19</span>
</div>
<span class="minus" title="За свои посты голосовать нельзя.Срок голосования истек."></span>
</div>
<div class="pageviews" title="Просмотры поста">2864</div>
<div class="favorite">
<a class="add" title="Добавить в избранное" href="http://habrahabr.ru/post/111569/#" onclick="return posts_add_to_favorite(this, &#39;2&#39;, 111569)"> </a>
</div>
<div class="favs_count" title="Количество пользователей, добавивших пост в избранное">49</div>
<div class="author">
<a title="Автор текста" href="http://habrahabr.ru/users/philpirj/">philpirj</a>
<span class="rating" title="рейтинг пользователя">68,9</span>
</div>
<div class="share">
<div class="twitter">
<a href="http://twitter.com/intent/tweet?text=%D0%9F%D0%B8%D1%88%D0%B5%D0%BC+HTTP+proxy+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+%D1%81+%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8+http://habr.ru/p/111569/+via+%40habrahabr+%23habr" title="Опубликовать ссылку в Twitter" target="_blank"></a>
</div>
<div class="vkontakte">
<a href="http://vk.com/share.php?url=http://habrahabr.ru/post/111569/" title="Опубликовать ссылку во ВКонтакте" onclick="window.open(this.href, &#39;Опубликовать ссылку во Вконтакте&#39;, &#39;width=800,height=300&#39;); return false"></a>
</div>
<div class="facebook">
<a href="https://www.facebook.com/sharer/sharer.php?u=http://habrahabr.ru/post/111569/" title="Опубликовать ссылку в Facebook" onclick="window.open(this.href, &#39;Опубликовать ссылку в Facebook&#39;, &#39;width=640,height=436,toolbar=0,status=0&#39;); return false"></a>
</div>
<div class="googleplus">
<a href="https://plus.google.com/share?url=http://habrahabr.ru/post/111569/" title="Опубликовать ссылку в Google Plus" onclick="window.open(this.href, &#39;Опубликовать ссылку в Google Plus&#39;, &#39;width=800,height=300&#39;); return false"></a>
</div>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div id="adriver_banner_132032996"></div>
<script type="text/javascript">
function show_inner_banner_block(name, url){
if( typeof(name) !== 'undefined'){
$.get('/html/'+name+'/1398441886/', function(html){
$('#adriver_banner_132032996').html(html);
$('.'+name+'_inner_banner').removeClass('hidden');
if( typeof(url) !== 'undefined'){
$('.'+name+'_inner_banner .block_url').attr('href', url);
}
})
}
}
$(function(){
var keyword = '';
if (typeof crtg_content !== 'undefined' && crtg_content) { keyword = crtg_content; }
var custom = { 4:ar_duo1 };
custom[1] = 'programming';
/* Антоша не удаляй это условие блеать! Как я тестить буду? */
//if (true)
// show_inner_banner_block('profit');
//else
new adriver("adriver_banner_132032996", {sid: 176776, bt: 52, bn: 3, custom: custom, keyword: keyword});
});
</script>
<div class="comments_list " id="comments">
<h2 class="title ">комментарии (<span id="comments_count">36</span>)
<span class="subscribe_comments">
отслеживать новые:
<label><input type="checkbox" id="subscribe_comments" rel="{target_type:&#39;2&#39;,target_id:111569 }" checked="checked"> в почте</label>
<label><input type="checkbox" id="tracker_comments" rel="{target_type:&#39;2&#39;,target_id:111569 }"> в трекере</label>
</span>
</h2>
<div class="comment_item" id="comment_3560456">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3560456">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560456" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 9: ↑8 и ↓1">+7</span>
</div>
</div>
<a href="http://habrahabr.ru/users/RReverser/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/34c56ae5d44d17f4faf0d2938d90ad9f_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/RReverser/" class="username">RReverser</a><span class="comma">,</span>
<time>10 января 2011 в 17:21</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560456" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560456 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Прочитав вступление, надеялся, что речь будет идти именно о плагинах для распознавания капчи.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560456 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560456">
<div class="comment_item" id="comment_3560513">
<span class="parent_id" data-parent_id="3560456"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3560513">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560513" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark positive ">
<span class="score" title="Всего 5: ↑4 и ↓1">+3</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>10 января 2011 в 17:45</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560513" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560513 )" title="В избранное"></a>
<div class="show_tree" data-id="3560513" data-parent_id="3560456" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560456" data-id="3560513" data-parent_id="3560456" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Технологическая борьба с такими могучими корпорациями, как Google, владеющий технологией reCAPTCHA, с моей точки зрения невозможен. Но использование сторонних решений, построенных на наличии социального расслоения — вполне. Подробнее о способах разгадки любых видов каптчи на английском написано <a href="http://www.zdnet.com/blog/security/inside-indias-captcha-solving-economy/1835">здесь</a>.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560513 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560513">
<div class="comment_item" id="comment_3560535">
<span class="parent_id" data-parent_id="3560513"></span>
<div class="comment_body">
<div class="info " rel="3560535">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560535" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 4: ↑4 и ↓0">+4</span>
</div>
</div>
<a href="http://habrahabr.ru/users/RReverser/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/34c56ae5d44d17f4faf0d2938d90ad9f_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/RReverser/" class="username">RReverser</a><span class="comma">,</span>
<time>10 января 2011 в 17:54</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560535" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560535 )" title="В избранное"></a>
<div class="show_tree" data-id="3560535" data-parent_id="3560513" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560513" data-id="3560535" data-parent_id="3560513" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
В гугл тоже люди, и он тоже строился) Обход всегда возможен, какой бы сложной технология не была. Просто нужно время и энтузиасты.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560535 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560535">
<div class="comment_item" id="comment_3560600">
<span class="parent_id" data-parent_id="3560535"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3560600">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560600" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark positive ">
<span class="score" title="Всего 2: ↑2 и ↓0">+2</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>10 января 2011 в 18:33</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560600" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560600 )" title="В избранное"></a>
<div class="show_tree" data-id="3560600" data-parent_id="3560535" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560535" data-id="3560600" data-parent_id="3560535" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Я имею в виду то, что если небольшое изменение с их стороны, прозрачное для их пользователей, может вызвать сбой распознавалки, её временную неработоспособность, и потребовать некоторого времени для приведения в норму. Уверен, что если такие качели станут серьёзными, то затраты на разработку станут более серьёзными, чем 3 копейки за разгаданную индусами каптчу.<br>
Покажет, конечно, только время.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560600 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560600">
<div class="comment_item" id="comment_3560613">
<span class="parent_id" data-parent_id="3560600"></span>
<div class="comment_body">
<div class="info " rel="3560613">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560613" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 1: ↑1 и ↓0">+1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/RReverser/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/34c56ae5d44d17f4faf0d2938d90ad9f_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/RReverser/" class="username">RReverser</a><span class="comma">,</span>
<time>10 января 2011 в 18:37</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560613" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560613 )" title="В избранное"></a>
<div class="show_tree" data-id="3560613" data-parent_id="3560600" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560600" data-id="3560613" data-parent_id="3560600" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
На самом деле в правильно написаной распознавалке прозрачные для пользователей изменения прозрачны и для нее. Нужно захватывать именно те данные, которые уже передаются пользователю (собственно отображаются на экране) и проблем не будет.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560613 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560613">
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3560603">
<span class="parent_id" data-parent_id="3560535"></span>
<div class="comment_body">
<div class="info " rel="3560603">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560603" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 1: ↑1 и ↓0">+1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/biffant/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/biffant/" class="username">biffant</a><span class="comma">,</span>
<time>10 января 2011 в 18:34</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560603" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560603 )" title="В избранное"></a>
<div class="show_tree" data-id="3560603" data-parent_id="3560535" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560535" data-id="3560603" data-parent_id="3560535" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
1. Реализация разгадывания капчи «немного» более затратна, чем её создание :)<br>
2. В гугл конечно работают люди, но reCAPTCHA они не делали :) Её ведь поглотили, когда поняли, что сами (быстро и дешево) лучше не сделают
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560603 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560603">
<div class="comment_item" id="comment_3560610">
<span class="parent_id" data-parent_id="3560603"></span>
<div class="comment_body">
<div class="info " rel="3560610">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560610" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 4: ↑2 и ↓2">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/RReverser/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/34c56ae5d44d17f4faf0d2938d90ad9f_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/RReverser/" class="username">RReverser</a><span class="comma">,</span>
<time>10 января 2011 в 18:36</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560610" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560610 )" title="В избранное"></a>
<div class="show_tree" data-id="3560610" data-parent_id="3560603" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560603" data-id="3560610" data-parent_id="3560603" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Я к тому, что если что-то принадлежит Google, то это не значит, что их победить невозможно. Империя сильна, но надежда есть) Да здравствует Люкас Скайуокер!
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560610 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560610">
<div class="comment_item" id="comment_3560988">
<span class="parent_id" data-parent_id="3560610"></span>
<div class="comment_body">
<div class="info " rel="3560988">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560988" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 5: ↑5 и ↓0">+5</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Stepler/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/92ad8e11e0f9007735197ebc9ee65a07_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Stepler/" class="username">Stepler</a><span class="comma">,</span>
<time>10 января 2011 в 21:03</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560988" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560988 )" title="В избранное"></a>
<div class="show_tree" data-id="3560988" data-parent_id="3560610" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560610" data-id="3560988" data-parent_id="3560610" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
да здравствует Дональд Кнут! у него сегодня ДР! 10 января 1938 года родился Дональд Эрвин Кнут (Donald Ervin Knuth), гуру программирования, автор классического труда «The Art of Computer Programming».
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560988 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560988">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3560604">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3560604">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560604" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 13: ↑11 и ↓2">+9</span>
</div>
</div>
<a href="http://habrahabr.ru/users/pokryshkin/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/pokryshkin/" class="username">pokryshkin</a><span class="comma">,</span>
<time>10 января 2011 в 18:34</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560604" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560604 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Вот собственно изза таких самоделкиных, любящих все повесить на ботов, и не интересно играть во многие онлайн игры. <br>
кто-то сидит в игре ради удовольствия, а тут приходят задроты с ботами, и игра уже становится не на интерес, а на крутость ботов.<br>
Вашу бы энергия да в мирное русло… )
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560604 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560604">
<div class="comment_item" id="comment_3560725">
<span class="parent_id" data-parent_id="3560604"></span>
<div class="comment_body">
<div class="info " rel="3560725">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560725" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 2: ↑1 и ↓1">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Rigidus/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/9d72ff86b6983f69f5b4c49d942b9681_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Rigidus/" class="username">Rigidus</a><span class="comma">,</span>
<time>10 января 2011 в 19:15</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560725" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560725 )" title="В избранное"></a>
<div class="show_tree" data-id="3560725" data-parent_id="3560604" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560604" data-id="3560725" data-parent_id="3560604" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Побеждает наиболее приспособленный :)
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560725 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560725">
<div class="comment_item" id="comment_3560750">
<span class="parent_id" data-parent_id="3560725"></span>
<div class="comment_body">
<div class="info " rel="3560750">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560750" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 5: ↑4 и ↓1">+3</span>
</div>
</div>
<a href="http://habrahabr.ru/users/pokryshkin/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/pokryshkin/" class="username">pokryshkin</a><span class="comma">,</span>
<time>10 января 2011 в 19:23</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560750" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560750 )" title="В избранное"></a>
<div class="show_tree" data-id="3560750" data-parent_id="3560725" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560725" data-id="3560750" data-parent_id="3560725" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Главное участие, а не победа. Это для обычных людей, играющих ради удовольствия.<br>
Для тех кто задрачивается с ботами — да, главное победа. Ну или/и повышение ЧСВ.<br>
<br>
Поэтому, первым со вторыми «играть» совершенно не интересно.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560750 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560750">
<div class="comment_item" id="comment_3560773">
<span class="parent_id" data-parent_id="3560750"></span>
<div class="comment_body">
<div class="info " rel="3560773">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560773" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark negative">
<span class="score" title="Всего 5: ↑2 и ↓3">–1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Rigidus/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/9d72ff86b6983f69f5b4c49d942b9681_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Rigidus/" class="username">Rigidus</a><span class="comma">,</span>
<time>10 января 2011 в 19:35</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560773" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560773 )" title="В избранное"></a>
<div class="show_tree" data-id="3560773" data-parent_id="3560750" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560750" data-id="3560773" data-parent_id="3560750" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format bad bad1">
какая разница кому что главное? победа — объективный факт, то что побеждает наиболее приспособленной — тезис, подтвержденный статистически, все остальное — эмоции
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560773 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560773">
<div class="comment_item" id="comment_3560847">
<span class="parent_id" data-parent_id="3560773"></span>
<div class="comment_body">
<div class="info " rel="3560847">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560847" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 5: ↑5 и ↓0">+5</span>
</div>
</div>
<a href="http://habrahabr.ru/users/pokryshkin/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/pokryshkin/" class="username">pokryshkin</a><span class="comma">,</span>
<time>10 января 2011 в 20:03</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560847" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560847 )" title="В избранное"></a>
<div class="show_tree" data-id="3560847" data-parent_id="3560773" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560773" data-id="3560847" data-parent_id="3560773" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Вы меня не поняли: разница в цели.<br>
Вот допустим мы с вами ходим в качалку, Вы жрете стероиды — чтобы быстрее набрать мышечный вес, силу,… (уровень в игре). А я хожу ради удовольствия, чтобы поддержать мышцы в тонусе.<br>
Вы думаете нам с вами будет интересно соревноваться? <br>
Если вы не полный идиот, то от «победы» в этом случае у вас даже самооценка не повысится.<br>
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560847 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560847">
<div class="comment_item" id="comment_3561377">
<span class="parent_id" data-parent_id="3560847"></span>
<div class="comment_body">
<div class="info " rel="3561377">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561377" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Aivean/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/3834cbf6774c6b200f36dc647401b362_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Aivean/" class="username">Aivean</a><span class="comma">,</span>
<time>10 января 2011 в 23:26</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561377" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561377 )" title="В избранное"></a>
<div class="show_tree" data-id="3561377" data-parent_id="3560847" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560847" data-id="3561377" data-parent_id="3560847" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
По своему опыту скажу, что «задрачиваются» больше те, кто играет честно. Любой программист по своей природе ленив, и рано или поздно начинает искать в игре «альтернативные» возможности. Лично мне, например, в своё время доставляло большее удовольствие написание интеллекта бота, чем продолжение тупого фарма.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561377 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561377">
<div class="comment_item" id="comment_3561403">
<span class="parent_id" data-parent_id="3561377"></span>
<div class="comment_body">
<div class="info " rel="3561403">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561403" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/pokryshkin/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/pokryshkin/" class="username">pokryshkin</a><span class="comma">,</span>
<time>10 января 2011 в 23:34</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561403" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561403 )" title="В избранное"></a>
<div class="show_tree" data-id="3561403" data-parent_id="3561377" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3561377" data-id="3561403" data-parent_id="3561377" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Ну тогда аналогия была бы другая — Вы бы разрабатывали стероиды, чтобы быстрее качаться, а не использовали чужие. <br>
Все-таки креативная составляющая должна быть.<br>
Вообще есть правила игры (у любой игры), там играют либо боты, либо люди, либо и те и другие. Когда за людей играют боты (нарушение правил) — это, скажем так, неспортивно. <br>
Мне самому интересно возиться с такими вещами, смотреть как «живет» созданный бот, учить его, развивать. Но для этого есть соответствующие игры, с соответствующим апи.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561403 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561403">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3560765">
<span class="parent_id" data-parent_id="3560604"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3560765">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560765" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark positive ">
<span class="score" title="Всего 2: ↑2 и ↓0">+2</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>10 января 2011 в 19:30</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560765" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560765 )" title="В избранное"></a>
<div class="show_tree" data-id="3560765" data-parent_id="3560604" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560604" data-id="3560765" data-parent_id="3560604" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
В принципе именно борьбу с бездарным просаживанием времени перед монитором, единственным результатом которой являются мозоли на подушечках пальцев я и считаю мирным руслом. Условно и упрощённо — программирование, заполнение wikipedia и habrahabr — Свет и Добро, travian — зло. В начале статьи как раз о внесении энтропии в индустрию онлайн игр.<br>
Критерий зла для меня прост: от игры большее количество пользователей получают негативные либо нейтральные эмоции, то есть игра не приносит большинству пользователей морального удовлетворения. А если от игры ни пользы (развитие мозга), ни морального удовлетворения играющих, то она зло.<br>
<br>
Изначально был проект, который задумывался как универсальная платформа для создания и работы ботов для онлайн игр, то есть некое подобие HabraWars, полем битвы ботом которой сможет являться любая браузерная онлайн-игра. Идея до сих пор жива и ждёт свободного времени для реализации.<br>
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560765 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560765">
<div class="comment_item" id="comment_3560775">
<span class="parent_id" data-parent_id="3560765"></span>
<div class="comment_body">
<div class="info " rel="3560775">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560775" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Rigidus/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/9d72ff86b6983f69f5b4c49d942b9681_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Rigidus/" class="username">Rigidus</a><span class="comma">,</span>
<time>10 января 2011 в 19:35</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560775" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560775 )" title="В избранное"></a>
<div class="show_tree" data-id="3560775" data-parent_id="3560765" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560765" data-id="3560775" data-parent_id="3560765" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Я тебя полностью поддерживаю. Расскажи про то, как заключить контракт с индусами?
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560775 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560775">
<div class="comment_item" id="comment_3560817">
<span class="parent_id" data-parent_id="3560775"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3560817">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560817" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark positive ">
<span class="score" title="Всего 1: ↑1 и ↓0">+1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>10 января 2011 в 19:48</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560817" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560817 )" title="В избранное"></a>
<div class="show_tree" data-id="3560817" data-parent_id="3560775" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560775" data-id="3560817" data-parent_id="3560775" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Я заключил примерно <a href="http://www.google.ru/search?q=%D0%B8%D0%BD%D0%B2%D0%B0%D0%B9%D1%82+antigate">так</a>.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560817 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560817">
</div>
</div>
<div class="comment_item" id="comment_3561041">
<span class="parent_id" data-parent_id="3560775"></span>
<div class="comment_body">
<div class="info " rel="3561041">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561041" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 2: ↑2 и ↓0">+2</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Error_403_Forbidden/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/b56f165b20a2c5da29dd5d4de63eb9c7_small.png" alt=""></a>
<a href="http://habrahabr.ru/users/Error_403_Forbidden/" class="username">Error_403_Forbidden</a><span class="comma">,</span>
<time>10 января 2011 в 21:29</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561041" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561041 )" title="В избранное"></a>
<div class="show_tree" data-id="3561041" data-parent_id="3560775" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560775" data-id="3561041" data-parent_id="3560775" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Есть такой сервис — <a href="http://anti-captcha.net/">anti-captcha.net</a><br>
За 1$ индусы распознают вам 1000 капч.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561041 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561041">
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3560977">
<span class="parent_id" data-parent_id="3560765"></span>
<div class="comment_body">
<div class="info " rel="3560977">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560977" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 2: ↑1 и ↓1">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Laytlas/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/aba121a45c5280dbe90dd5a0d6e5a1ce_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Laytlas/" class="username">Laytlas</a><span class="comma">,</span>
<time>10 января 2011 в 20:58</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560977" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560977 )" title="В избранное"></a>
<div class="show_tree" data-id="3560977" data-parent_id="3560765" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560765" data-id="3560977" data-parent_id="3560765" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Если вы игры считаете бездарным просиживанием времени, то почему бы просто не отказаться от них и агитировать других сделать тоже самое. Вы же, напротив, создаете программы, которые завлекут человека еще более в мир игры.<br>
Сложно сказать кому вы помогаете «wikipedia и habrahabr» или «travian».
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560977 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560977">
</div>
</div>
<div class="comment_item" id="comment_3561298">
<span class="parent_id" data-parent_id="3560765"></span>
<div class="comment_body">
<div class="info " rel="3561298">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561298" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark negative">
<span class="score" title="Всего 1: ↑0 и ↓1">–1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Hikedaya/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/80f08fa85a3220524676d1d84f9b4b5b_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Hikedaya/" class="username">Hikedaya</a><span class="comma">,</span>
<time>10 января 2011 в 23:04</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561298" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561298 )" title="В избранное"></a>
<div class="show_tree" data-id="3561298" data-parent_id="3560765" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560765" data-id="3561298" data-parent_id="3560765" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format bad bad1">
Скажу честно, за желание изучить новый язык программирования и написанный успешно работающий (как видно из статьи) проект — плюс. А вот за саму идею — минус громадный. Получается любопытная ситуация — болезнь (ботоводство) пытается бороться с лекарством от этой же самой болезни. Да, лекарство не идеальное, но что поделать…<br>
Вы никогда не задумывались о том, насколько нервирует капча тех людей, которые в игры приходят всего лишь отдохнуть? А если система защиты от ботов в проекте не ограничивается только капчой?
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561298 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561298">
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3561117">
<span class="parent_id" data-parent_id="3560604"></span>
<div class="comment_body">
<div class="info " rel="3561117">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561117" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark negative">
<span class="score" title="Всего 1: ↑0 и ↓1">–1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/brainerazer/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/brainerazer/" class="username">brainerazer</a><span class="comma">,</span>
<time>10 января 2011 в 22:03</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561117" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561117 )" title="В избранное"></a>
<div class="show_tree" data-id="3561117" data-parent_id="3560604" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560604" data-id="3561117" data-parent_id="3560604" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format bad bad1">
Скажите, а вы когда-нибудь пробовали играть в травиан на спидсервере? Покажите мне хоть один альянс, который выиграл «честно».
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561117 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561117">
<div class="comment_item" id="comment_3561140">
<span class="parent_id" data-parent_id="3561117"></span>
<div class="comment_body">
<div class="info " rel="3561140">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561140" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/pokryshkin/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/pokryshkin/" class="username">pokryshkin</a><span class="comma">,</span>
<time>10 января 2011 в 22:13</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561140" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561140 )" title="В избранное"></a>
<div class="show_tree" data-id="3561140" data-parent_id="3561117" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3561117" data-id="3561140" data-parent_id="3561117" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
На спидсервере не играл. На нормальном — было дело, только все это задротство с координацией действий «секунда в секунду» очень быстро надоело. И, да, считаю что в травиан большинство играет с ботами.<br>
Нужно просто разделять игры для ботов и игры для людей. К сожалению, не знаю ни одной онлайн игры без ботов, рано или поздно боты и читеры появляются в любой игре.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561140 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561140">
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3561251">
<span class="parent_id" data-parent_id="3560604"></span>
<div class="comment_body">
<div class="info " rel="3561251">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561251" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Hikedaya/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/80f08fa85a3220524676d1d84f9b4b5b_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Hikedaya/" class="username">Hikedaya</a><span class="comma">,</span>
<time>10 января 2011 в 22:48</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561251" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561251 )" title="В избранное"></a>
<div class="show_tree" data-id="3561251" data-parent_id="3560604" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560604" data-id="3561251" data-parent_id="3560604" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
<i>игра уже становится не на интерес, а на крутость ботов.</i><br>
Как уже давно было признано — задрот &gt;&gt;&gt; бота. В том плане, что человек все же быстрее приспосабливается к смене окружения в игре. Но в любом случае — прийти играть в MMORPG против компьютера (в большинстве случаев еще и деньги за это платя), а нужно ли оно? Так что в этом вы правы — не интересно.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561251 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561251">
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3560889">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3560889">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560889" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 1: ↑1 и ↓0">+1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Ctacok/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/Ctacok/" class="username">Ctacok</a><span class="comma">,</span>
<time>10 января 2011 в 20:17</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560889" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560889 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Xrumer 7 распознаёт reCAPTCHA, вышел 10 дней назад. Да и вообще Xrumer очень много понимает каптч. Автоматически. Но Увы, как либо купить систему распознования нереально.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560889 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560889">
<div class="comment_item" id="comment_3561004">
<span class="parent_id" data-parent_id="3560889"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3561004">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561004" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>10 января 2011 в 21:11</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561004" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561004 )" title="В избранное"></a>
<div class="show_tree" data-id="3561004" data-parent_id="3560889" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560889" data-id="3561004" data-parent_id="3560889" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Да, это замечательно, но как вы понимаете, цель была совсем не в этом, а поставленных задач Xrumer не решает. Повторить Xrumer'овские алгоритмы за 40 часов я не берусь.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561004 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561004">
</div>
</div>
<div class="comment_item" id="comment_3561547">
<span class="parent_id" data-parent_id="3560889"></span>
<div class="comment_body">
<div class="info " rel="3561547">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561547" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Gaikotsu/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/42c01ac1ed259f3bbc464a65d709c604_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Gaikotsu/" class="username">Gaikotsu</a><span class="comma">,</span>
<time>11 января 2011 в 00:15</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561547" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561547 )" title="В избранное"></a>
<div class="show_tree" data-id="3561547" data-parent_id="3560889" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560889" data-id="3561547" data-parent_id="3560889" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Черт, а я то думаю чего спамботы как с цепи сорвались на одном из форумов что я админю…<br>
<br>
До нового года все было тихо и мирно — дай бог один-два шальных бота раз в пару месяцев, а после нового года прямо нашествие какое-то — по паре десятков в день регается и спамит…
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561547 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561547">
<div class="comment_item" id="comment_3562727">
<span class="parent_id" data-parent_id="3561547"></span>
<div class="comment_body">
<div class="info " rel="3562727">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3562727" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Ctacok/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/Ctacok/" class="username">Ctacok</a><span class="comma">,</span>
<time>11 января 2011 в 13:26</time>
<a href="http://habrahabr.ru/post/111569/#comment_3562727" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3562727 )" title="В избранное"></a>
<div class="show_tree" data-id="3562727" data-parent_id="3561547" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3561547" data-id="3562727" data-parent_id="3561547" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Предлагаю сделать «человекопонятную каптчу» т.е., заливайте фотки кошек, собачек, и т.п. простое, и предлагать ответить что на картинке, хрумер ещё не человек, понять не сможет :)
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3562727 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3562727">
<div class="comment_item" id="comment_3564266">
<span class="parent_id" data-parent_id="3562727"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3564266">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3564266" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>11 января 2011 в 19:50</time>
<a href="http://habrahabr.ru/post/111569/#comment_3564266" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3564266 )" title="В избранное"></a>
<div class="show_tree" data-id="3564266" data-parent_id="3562727" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3562727" data-id="3564266" data-parent_id="3562727" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Есть и такая каптча, индусы такие тоже отгадывают. И аудиокаптчи. Индусы — тоже люди, в конце-то концов.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3564266 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3564266">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3560914">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3560914">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560914" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 1: ↑1 и ↓0">+1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/naryl/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/naryl/" class="username">naryl</a><span class="comma">,</span>
<time>10 января 2011 в 20:33</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560914" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560914 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Странно для такой задачи видеть в списке кандидатов Java, но не видеть Tcl. Полные 4МБ под ваши требования не подходят, но компактные сборки тоже имеются.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560914 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560914">
<div class="comment_item" id="comment_3561071">
<span class="parent_id" data-parent_id="3560914"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3561071">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561071" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark positive ">
<span class="score" title="Всего 1: ↑1 и ↓0">+1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>10 января 2011 в 21:42</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561071" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561071 )" title="В избранное"></a>
<div class="show_tree" data-id="3561071" data-parent_id="3560914" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3560914" data-id="3561071" data-parent_id="3560914" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Пожалуй, да. Просто с Lua я был ранее поверхностно знаком, а с Tcl — увы, нет. Торжественно обещаю изучить, как только выпадет минутка. Насколько я понимаю, язык отличный.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561071 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561071">
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3560968">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3560968">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3560968" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark negative">
<span class="score" title="Всего 3: ↑1 и ↓2">–1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/anmiles/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/47f7498db07c8d7c8e6d6a6f88be15e6_small.png" alt=""></a>
<a href="http://habrahabr.ru/users/anmiles/" class="username">anmiles</a><span class="comma">,</span>
<time>10 января 2011 в 20:54</time>
<a href="http://habrahabr.ru/post/111569/#comment_3560968" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3560968 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format bad bad1">
Я так и думал, что рекапчу сломали. Неважно как конкретно, но можно сказать, что сломали :)
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3560968 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3560968">
</div>
</div>
<div class="comment_item" id="comment_3561001">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3561001">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561001" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark positive ">
<span class="score" title="Всего 1: ↑1 и ↓0">+1</span>
</div>
</div>
<a href="http://habrahabr.ru/users/mechmind/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/stub-user-small.gif" alt=""></a>
<a href="http://habrahabr.ru/users/mechmind/" class="username">mechmind</a><span class="comma">,</span>
<time>10 января 2011 в 21:08</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561001" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561001 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Универсальный прокси можно было не писать, если подсунуть браузеру proxy.pac — маленький javascript файл с инструкциями, для каких хостов какие прокси использовать, и использовать ли :)
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561001 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561001">
</div>
</div>
<div class="comment_item" id="comment_3561059">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3561059">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561059" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/Mezomish/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/8fd254c07622c26e6cdb8dc7849d7a49_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/Mezomish/" class="username">Mezomish</a><span class="comma">,</span>
<time>10 января 2011 в 21:37</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561059" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561059 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
<i>&gt;Python Как известно, работает везде и всё включено (batteries included). Весит 7Мб. По современным меркам, конечно, немного, но всё же хотелось компактнее. Остался вопрос, как этот инсталлятор внедрить в инсталлятор моей утилиты.</i><br>
<br>
Для Windows есть <a href="http://www.py2exe.org/">py2exe</a>, при использовании которого установка питоньего интерпретатора на клиентскую машину не понадобится — приложение становится обычным exe-шником, зависящим от нескольких питоньих dll, которые упаковываются в основной инсталлер. Размер, насколько я помню, получается вполне вменяемым.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561059 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561059">
<div class="comment_item" id="comment_3561063">
<span class="parent_id" data-parent_id="3561059"></span>
<div class="comment_body">
<div class="info is_topic_starter is_author" rel="3561063">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561063" class="voting ">
<span class="minus" title="За свои комментарии голосовать нельзя"></span>
<span class="plus" title="За свои комментарии голосовать нельзя"></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/philpirj/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/f50b744625ff1e41ec0bdbb754b62824_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/philpirj/" class="username">philpirj</a><span class="comma">,</span>
<time>10 января 2011 в 21:39</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561063" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561063 )" title="В избранное"></a>
<div class="show_tree" data-id="3561063" data-parent_id="3561059" title="Показать ветку комментариев">↵</div>
<a href="http://habrahabr.ru/post/111569/#comment_3561059" data-id="3561063" data-parent_id="3561059" class="to_parent">↑</a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
Ну, как раз около 7Мб
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561063 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561063">
</div>
</div>
</div>
</div>
<div class="comment_item" id="comment_3561407">
<span class="parent_id" data-parent_id="0"></span>
<div class="comment_body">
<div class="info " rel="3561407">
<div class="folding-dot-holder"><div class="folding-dot"></div></div>
<div id="voting_3561407" class="voting ">
<span class="minus" title="Срок голосования истек "></span>
<span class="plus" title="Срок голосования истек "></span>
<div class="mark ">
<span class="score" title="Всего 0: ↑0 и ↓0">0</span>
</div>
</div>
<a href="http://habrahabr.ru/users/savostin/" class="avatar"><img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/0043d50bde132e1f3bd7d2f2af1c3fa2_small.jpg" alt=""></a>
<a href="http://habrahabr.ru/users/savostin/" class="username">savostin</a><span class="comma">,</span>
<time>10 января 2011 в 23:35</time>
<a href="http://habrahabr.ru/post/111569/#comment_3561407" class="link_to_comment">#</a>
<a href="http://habrahabr.ru/post/111569/#" class="favorite add" onclick="return comments_add_to_favorite(this, &#39;3&#39;, 3561407 )" title="В избранное"></a>
<span class="to_chidren"></span>
<div class="clear"></div>
</div>
<div class="message html_format ">
&gt; Вес кастомной сборки VM в нужными библиотеками… <a href="http://www.murga-projects.com/murgaLua/">www.murga-projects.com/murgaLua/</a><br>
Virus or unwanted program 'TR/Horse.QGQ [trojan]' detected in file '\murgaLua\bin\Windows\no console patch.exe.<br>
Хотя Avira частенько ложно срабатывает.
</div>
<div class="reply_form_placeholder"></div>
<div class="reply">
<a href="http://habrahabr.ru/post/111569/#reply" class="reply_link" onclick="return comment_show_reply_form(3561407 )">ответить</a>
</div>
</div>
<div class="reply_comments" id="reply_comments_3561407">
</div>
</div>
</div>
<div class="comments_form" id="comments_form_placeholder">
<h2 class="title"><a href="http://habrahabr.ru/post/111569/#" onclick="return comment_show_form()">Написать комментарий</a></h2>
<form action="http://habrahabr.ru/json/comment/" method="post" id="comments_form">
<div id="preview_placeholder" class="hidden html_format"></div>
<input type="hidden" name="ts" value="1398619831">
<input type="hidden" name="tt" value="2">
<input type="hidden" name="ti" value="111569">
<input type="hidden" name="comment_id" value="0">
<input type="hidden" name="parent_id" value="0">
<div class="editor">
<div class="panel">
<div class="wysiwyg_wrapper">
<div class="can_use_html"><a href="http://habrahabr.ru/post/111569/#html_help" onclick="$(this).parents(&#39;.wysiwyg_wrapper&#39;).find(&#39;.help_holder&#39;).toggleClass(&#39;hidden&#39;);return false;">html-теги</a></div>
<a title="Жирный" onclick="return habraWYG.insertTagWithText(this, &#39;b&#39;);" href="http://habrahabr.ru/post/111569/#" tabindex="-1"><img width="20" height="20" alt="Ж" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/bold_ru.gif"></a>
<a title="Курсив" onclick="return habraWYG.insertTagWithText(this, &#39;i&#39;);" href="http://habrahabr.ru/post/111569/#" tabindex="-1"><img width="20" height="20" alt="К" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/italic_ru.gif"></a>
<a title="Подчёркнутый" onclick="return habraWYG.insertTagWithText(this, &#39;u&#39;);" href="http://habrahabr.ru/post/111569/#" tabindex="-1"><img width="20" height="20" alt="__" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/underline_ru.gif"></a>
<a title="Зачёркнутый" onclick="return habraWYG.insertTagWithText(this, &#39;s&#39;);" href="http://habrahabr.ru/post/111569/#" tabindex="-1"><img width="20" height="20" alt="—" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/strikethrough.gif"></a>
<a title="Цитата" style="margin-right: 10px;" onclick="return habraWYG.insertTagWithText(this, &#39;blockquote&#39;);" href="http://habrahabr.ru/post/111569/#" tabindex="-1"><img width="20" height="20" alt="Цитата" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/blockquote.png"></a>
<select class="with-title" title="Используйте этот тег для блочных элементов" name="source" onchange="habraWYG.insertSource(this);" tabindex="-1">
<option value="" class="title">Source:</option>
<option value="bash">Bash</option>
<option value="cs">C#</option>
<option value="cpp">C++</option>
<option value="css">CSS</option>
<option value="diff">Diff</option>
<option value="html">HTML</option>
<option value="xml">XML</option>
<option value="java">Java</option>
<option value="javascript">JavaScript</option>
<option value="php">PHP</option>
<option value="perl">Perl</option>
<option value="python">Python</option>
<option value="ruby">Ruby</option>
<option value="sql">SQL</option>
<option value="1c">1C</option>
<option value="actionscript">ActionScript</option>
<option value="apache">Apache</option>
<option value="axapta">Axapta</option>
<option value="cmake">CMake</option>
<option value="coffeescript">CoffeeScript</option>
<option value="dos">DOS</option>
<option value="delphi">Delphi</option>
<option value="django">Django</option>
<option value="erlang">Erlang</option>
<option value="erlang_repl">Erlang REPL</option>
<option value="glsl">GLSL</option>
<option value="go">Go</option>
<option value="haskell">Haskell</option>
<option value="lisp">Lisp</option>
<option value="lua">Lua</option>
<option value="mel">MEL</option>
<option value="markdown">Markdown</option>
<option value="matlab">Matlab</option>
<option value="nginx">Nginx</option>
<option value="objectivec">Objective C</option>
<option value="rust">Rust</option>
<option value="scala">Scala</option>
<option value="smalltalk">Smalltalk</option>
<option value="tex">TeX</option>
<option value="vbscript">VBScript</option>
<option value="vhdl">VHDL</option>
<option value="vala">Vala</option>
</select>
<a style="margin: auto 10px;" title="Код - Используйте этот тег для строчных элементов" onclick="return habraWYG.insertTagWithText(this, &#39;code&#39;);" href="http://habrahabr.ru/post/111569/#" tabindex="-1" class="txt"><img width="30" height="20" alt="Код" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/code.gif"></a>
<a title="Вставить ссылку" onclick="return habraWYG.insertLink(this);" href="http://habrahabr.ru/post/111569/#" tabindex="-1"><img width="20" height="20" alt="A" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/link.gif"></a>
<a title="Вставить изображение" onclick="return habraWYG.insertImage(this);" href="http://habrahabr.ru/post/111569/#" tabindex="-1"><img width="20" height="20" alt="IMG" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/image.gif"></a>
<div class="help_holder hidden">
<h4>Теги Хабрахабра</h4>
<dl class="block_semi">
<dt>&lt;habracut&gt;</dt>
<dd class="description">Используется только в текстах постов, скрывает под кат часть текста, следующую за тегом (будет написано «Читать дальше»).</dd>
</dl>
<dl class="block_semi">
<dt>&lt;habracut text="Подробности" /&gt;</dt>
<dd class="description">Так можно превратить надпись «Читать дальше» в любой текст.</dd>
</dl>
<dl class="block_semi">
<dt>&lt;source lang="Язык"&gt;&lt;/source&gt;</dt>
<dd class="description">Подсвечивает исходный код (на выбор:
Bash, C#, C++, CSS, Diff, HTML, XML, Ini, Java, JavaScript, PHP, Perl, Python, Ruby, SQL,
1C, AVR Assembler, ActionScript, Apache, Axapta, CMake, CoffeeScript, DOS, .bat, Delphi, Django, Erlang, Erlang REPL, Go, Haskell, Lisp, Lua, MEL, Markdown, Matlab, Nginx, Objective C, Parser3, Python profile, RenderMan, Rust, Scala, Smalltalk, TeX, VBScript, VHDL, Vala
).</dd>
</dl>
<dl class="block_semi">
<dt>&lt;video&gt;http://...&lt;/video&gt;</dt>
<dd class="description">Добавляет в пост видео со следующих хостингов: YouTube, RuTube, Google video, Vimeo, Я.Видео и Видео@Mail.ru<br>Вставляйте между тегами только прямую ссылку на видеоролик.</dd>
</dl>
<dl class="block_semi">
<dt>&lt;slideshow&gt;http://...&lt;/slideshow&gt;</dt>
<dd class="description">Вставка интерактивного слайд-шоу. Пока поддерживается только сервис Slideshare.net.</dd>
</dl>
<dl class="block_semi">
<dt>&lt;hh user="Ник" /&gt;</dt>
<dd class="description">Выводит имя хабрапользователя посреди текста, обратный слеш (/) в конце тега обязателен. Вы так же можете использовать конструкцию <b>@username</b>, где <b>username</b> — это ник пользователя. </dd>
</dl>
<dl class="block_semi">
<dt>&lt;spoiler title="Заголовок"&gt;Содержимое&lt;/spoiler&gt;</dt>
<dd class="description">Вставка спойлера (разворачиваемый блок информации).</dd>
</dl>
<h4>Стандартные</h4>
<table class="wide">
<tbody><tr>
<td>
<dl class="block_semi">
<dt>&lt;h1&gt;&lt;/h1&gt;<br>
...<br>
&lt;h6&gt;&lt;/h6&gt;
</dt>
<dd class="description">Заголовки разного уровня.</dd>
</dl>
<dl class="block_semi">
<dt>&lt;img src="" /&gt;</dt>
<dd class="description">Вставка изображения, в атрибуте src нужно указывать полный путь к изображению. Возможно выравнивание картинки атрибутом align.</dd>
</dl>
<dl class="block_semi">
<dt>&lt;a href="http://..."&gt;Ссылка&lt;/a&gt;</dt>
<dd class="description">Вставка ссылки, в атрибуте href указывается желаемый интернет-адрес или якорь (anchor) для навигации по странице.</dd>
</dl>
<dl class="block_semi">
<dt>&lt;anchor&gt;Example1&lt;/anchor&gt;</dt>
<dd class="description">Тег для указания якоря. Для вызова используйте тег вставки ссылок (&lt;a href="#Example1"&gt;Текст&lt;/a&gt;).</dd>
</dl>
<dl class="block_semi">
<dt>&lt;b&gt;&lt;/b&gt;<br>
&lt;strong&gt;&lt;/strong&gt;</dt>
<dd class="description">Выделение важного текста, на странице выделяется жирным начертанием.</dd>
</dl>
<dl class="block_semi">
<dt>&lt;i&gt;&lt;/i&gt;<br>
&lt;em&gt;&lt;/em&gt;</dt>
<dd class="description">Выделение важного текста, на странице выделяется курсивом.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;s&gt;&lt;/s&gt;<br>
&lt;strike&gt;&lt;/strike&gt;
</dt>
<dd class="description">Текст между этими тегами будет отображаться как зачеркнутый.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;u&gt;&lt;/u&gt;
</dt>
<dd class="description">Текст между этими тегами будет отображаться как подчеркнутый.</dd>
</dl>
</td>
<td width="5%"></td>
<td>
<dl class="block_semi">
<dt>
&lt;hr /&gt;
</dt>
<dd class="description">Тег для вставки горизонтальной линии.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;blockquote&gt;&lt;/blockquote&gt;
</dt>
<dd class="description">Используйте этот тег для выделения цитат.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;table&gt;&lt;/table&gt;<br>
&lt;th&gt;&lt;/th&gt;<br>
&lt;td&gt;&lt;/td&gt;<br>
&lt;tr&gt;&lt;/tr&gt;
</dt>
<dd class="description">Набор тегов для создания таблицы. Тег &lt;td&gt; обозначает ячейку таблицы, тег &lt;th&gt; - ячейку в заголовке, &lt;tr&gt; - строчку таблицы. Все содержимое таблицы помещайте в тег &lt;table&gt;.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;sup&gt;&lt;/sup&gt;<br>
&lt;sub&gt;&lt;/sub&gt;
</dt>
<dd class="description">Текст, заключенный в тег &lt;sup&gt; отображается в виде верхнего индекса, &lt;sub&gt; - в виде нижнего.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;abbr title="" &gt;&lt;/abbr&gt;<br>
&lt;acronym title="" &gt;&lt;/acronym&gt;
</dt>
<dd class="description">Тегом &lt;abbr&gt; выделяется аббревиатура, в атрибуте title указывайте её расшифровку. Используйте тег &lt;acronym&gt; для устоявшихся аббревиатур.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;pre&gt;&lt;/pre&gt;
</dt>
<dd class="description">Текст в теге &lt;pre&gt; не форматируется автоматически.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;nobr&gt;&lt;/nobr&gt;<br>
&lt;br clear="all|left||right" /&gt;
</dt>
<dd class="description">Текст, помещенный в тег &lt;nobr&gt;, не переносится на странице; для принудительного переноса текста используйте тег &lt;br /&gt;; для аккуратного выравнивания изображений используйте атрибут clear="all|left||right" в теге &lt;br /&gt;.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;ul&gt;&lt;/ul&gt;<br>
&lt;li&gt;&lt;/li&gt;
</dt>
<dd class="description">Ненумерованный список; каждый элемент списка задается тегом &lt;li&gt;, набор элементов списка помещайте в тег &lt;ul&gt;.</dd>
</dl>
<dl class="block_semi">
<dt>
&lt;ol&gt;&lt;/ol&gt;<br>
&lt;li&gt;&lt;/li&gt;
</dt>
<dd class="description">Нумерованный список; каждый элемент списка задается тегом &lt;li&gt;, набор элементов списка помещайте в тег &lt;ol&gt;.</dd>
</dl>
</td>
</tr>
</tbody></table>
<div class="close_html"><a href="http://habrahabr.ru/post/111569/#html_help_close" onclick="$(this).parents(&#39;.wysiwyg_wrapper&#39;).find(&#39;.help_holder&#39;).toggleClass(&#39;hidden&#39;);return false;">закрыть</a></div>
</div>
</div>
</div>
<div class="text-holder">
<textarea cols="30" rows="10" name="text" id="comment_text"></textarea>
</div>
<span id="error_text" class="error"></span>
</div>
<div class="buttons">
<input type="button" class="preview disableble" value="Предпросмотр" disabled="disabled" onclick="comment_preview(this.form, this)">
<input type="button" class="submit disableble" value="Написать" disabled="disabled" onclick="comment_send(this.form, this)">
<input type="button" class="edit hidden disableble" value="Сохранить" disabled="disabled" onclick="comment_update(this.form, this)">
<span class="time_left" title="Оставшееся время редактирования комментария"></span>
</div>
</form>
</div>
<form action="http://habrahabr.ru/json/favorites/" method="post" id="edit_tags_form" class="hidden">
<input type="hidden" name="action" value="add">
<input type="hidden" name="ti" value="0">
<input type="hidden" name="tt" value="0">
<label>Пометьте топик понятными вам метками, если хотите</label>
<input type="text" name="tags_string" class="tags_string" autocomplete="off">
<div class="description">Метки лучше разделять запятой. Например: <i>общение, социальные сети, myspace.com, подростки, мердок</i></div>
<input type="submit" value="Сохранить" class="submit"> или <a href="http://habrahabr.ru/post/111569/#" class="close" onclick="return close_edit_tags()">закрыть</a>
</form>
</div>
<div class="sidebar_right">
<div class="banner_300x500">
<div id="adriver_banner_1863387959"></div>
<script type="text/javascript">
$(function(){
var keyword = '';
if (typeof crtg_content !== 'undefined' && crtg_content) { keyword = crtg_content; }
var custom = {4:ar_duo1};
custom[1] = 'programming';
new adriver("adriver_banner_1863387959", {sid: 176776, bt: 52, bn: 1, custom: custom, keyword: keyword});
}());
</script>
</div>
<div class="block daily_best_posts">
<div class="title">Лучшее <sup>за 24 часа</sup></div>
<div class="posts_list">
<div class="post_item">
<a href="http://habrahabr.ru/post/220999/" class="post_name">DDoS любого сайта с использованием заметок Facebook</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/221031/" class="post_name">Создатель мультфильма «Крепость» выпустит продолжение</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220989/" class="post_name">Создание робота балансера на arduino</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/221011/" class="post_name">J может быть читаемым</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/company/hola/blog/220983/" class="post_name">Readability своими руками</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/221033/" class="post_name">«Правило ноля»</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220977/" class="post_name">Незаметные сложности ракетной техники: Часть 5. Стартовые сооружения</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220953/" class="post_name">HD FPV на Raspberry Pi. Работа над ошибками</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/company/zfort/blog/220995/" class="post_name">Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №106 (20 — 26 апреля 2014)</a>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220961/" class="post_name">Про компоновку, dependency hell и обратную совместимость</a>
</div>
</div>
<div class="all"><a href="http://habrahabr.ru/top/">все лучшие</a></div>
</div>
<div class="block similar_posts">
<div class="title">Похожие посты</div>
<div class="posts_list">
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/220031/">Пишем Penguin Daycare Simulator на Go (Google App Engine) и Lua (Corona SDK)</a>
<span class="when">26.04.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/219471/">Асинхронный HTTP в Play Framework</a>
<span class="when">17.04.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/217773/">LUA в nginx: лапшакод в стиле inline php</a>
<span class="when">01.04.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/217437/">Свой http-сервер менее чем в 40 строк кода на libevent и C++11</a>
<span class="when">30.03.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/216751/">«HTTP Strict-Transport-Security» или как обезопасить себя от атак «man-in-the-middle» и заставить браузер всегда использовать HTTPS</a>
<span class="when">23.03.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/215237/">LUA в nginx: горячий кеш в памяти</a>
<span class="when">10.03.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/215235/">LUA в nginx: слегка интеллектуальный firewall</a>
<span class="when">10.03.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/215117/">Простым языком об HTTP</a>
<span class="when">09.03.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/214985/">Application Insights для Visual Studio Online — мощный инструмент диагностики в набор разработчика</a>
<span class="when">07.03.2014</span>
</div>
<div class="post_item">
<a class="post_name" href="http://habrahabr.ru/post/133703/">Использование HTTP proxy и SOCKS в Linux</a>
<span class="when">30.11.2011</span>
</div>
</div>
</div>
<div class="block similar_questions">
<div class="title">Вопросы по теме</div>
<div class="posts_list">
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/81706?_aa=press_anykey">Как реализовать через Zend_Http_Client устойчивую работу через прокси?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/79086?_aa=press_anykey">Как организовать шлюз в i2p из обычного интернета?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/77354?_aa=press_anykey">Прокси через BitTorrent - возможно ли?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/89905?_aa=press_anykey">Объясните, что с рекапчей?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/89885?_aa=press_anykey">Recaptcha - автофокус инпута?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/88211?_aa=press_anykey">Как реализовать демики на сайте?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/87318?_aa=press_anykey">Как реализовать callback для обновления UI из http-запроса (NSURLSession)?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/86858?_aa=press_anykey">HTTP кэширование Symfony2 - как отдать свежие данные?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/86348?_aa=press_anykey">Как защитить sms-рассылку от bruteforce?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/86278?_aa=press_anykey">Связывание Lua с объектами C++</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/85190?_aa=press_anykey">Почему $_COOKIE записываются, но после перезагрузки страницы читаются как устаревшие?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/84602?_aa=press_anykey">Какие нужны знания для перехвата данных?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/84154?_aa=press_anykey">HTTPS и индексация сайта</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/83590?_aa=press_anykey">Как установить nginx + LuaJIT на Debian Wheezy?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/83332?_aa=press_anykey">Как заставить http.get (NodeJS) работать синхронно?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/82126?_aa=press_anykey">Что происходит с приложением если клиент закрывает HTTP соединения не дождавшись ответа?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/82038?_aa=press_anykey">Как пустить skype через squidguard (whitelist)</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/81964?_aa=press_anykey">Почему вебсервер получает только часть из многочисленных отправленных GET запросов через сокеты?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/81666?_aa=press_anykey">Какие есть хорошие IDE для Android?</a>
</div>
<div class="post_item">
<a class="post_name" href="https://toster.ru/q/81500?_aa=press_anykey">Elastix - как позволить пользователем из внешней сети использовать внутреннюю для IP-телефонии?</a>
</div>
</div>
</div>
<div class="block live_broadcast">
<div class="title">Что обсуждают? </div>
<div class="live_broadcast_activity">
<div class="posts_list">
<div class="post_item">
<a href="http://habrahabr.ru/post/220969#comments" class="post_name">Список всевозможных методов монетизации мобильных игр</a>&nbsp;<span class="count">10</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/123140#comments" class="post_name">Изолирование приложения с IP-адресом из VPN другой страны на примере Steam</a>&nbsp;<span class="count">8</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/221027#comments" class="post_name">Изучаем Derby 0.6 — разбор примеров — #1</a>&nbsp;<span class="count">8</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220781#comments" class="post_name">import sphinxapi без танцев или простая установка sphinxapi.py через pip</a>&nbsp;<span class="count">4</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220989#comments" class="post_name">Создание робота балансера на arduino</a>&nbsp;<span class="count">9</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220403#comments" class="post_name">Официальное мобильное приложение Хабрахабра</a>&nbsp;<span class="count">547</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/221063#comments" class="post_name">В который раз этот класс?</a>&nbsp;<span class="count">2</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/221017#comments" class="post_name">Голым по интернету или скрываться под псевдонимом и потерять репутацию онлайн</a>&nbsp;<span class="count">21</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/221055#comments" class="post_name">Алгоритмы сортировки в виде пошаговой анимации</a>&nbsp;<span class="count">9</span>
</div>
<div class="post_item">
<a href="http://habrahabr.ru/post/220897#comments" class="post_name">TI-84+</a>&nbsp;<span class="count">49</span>
</div>
</div>
<div class="all"><a href="http://habrahabr.ru/posts/">все посты</a></div>
</div>
</div>
<!-- AdRiver code START. Type:AjaxJS Site: habrahabr PZ: 0 BN: 2 -->
<div id="adriver_banner_480931290" class="adbanner"></div>
<script type="text/javascript">
$(function(){
var check_scroll_position = function() {
var height = $(window).height();
var scrollTop = $(window).scrollTop();
var scrollBottom = $(window).scrollTop() + height;
var blockTop = $('#adriver_banner_480931290').position().top;
var show = scrollTop < blockTop && blockTop < scrollBottom;
//console.log('scroll', scrollTop, blockTop, scrollBottom, show)
if( show ){
//console.log('show bn2');
$( window ).off('scroll', check_scroll_position);
$( window ).trigger('show_bn2');
}
};
$( window ).on('scroll', check_scroll_position);
$( window ).on('show_bn2', function(){
var keyword = '';
if (typeof crtg_content !== 'undefined' && crtg_content) { keyword = crtg_content; }
var custom = {4:ar_duo1};
custom[1] = 'programming';
new adriver("adriver_banner_480931290", {sid: 176776, bt: 52, bn: 2, custom: custom, keyword: keyword});
});
});
</script>
<!-- AdRiver code END -->
<div class="block best_company">
<div class="title">Компания дня <img src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/bg_cicle_help.png" class="help-tip"></div>
<div class="company_info">
<div class="name">
<img class="favicon" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/962805082f637b91dbf30ebb10ef3c33_small.jpg" alt="Mail.Ru Group" height="16" width="16">
<div class="company_name"><a href="http://habrahabr.ru/company/mailru/" class="title">Mail.Ru Group</a></div>
</div>
<p>Последний пост:
<a href="http://habrahabr.ru/company/mailru/blog/220671/">Тренировочный раунд RCC 2014 Warmup</a>
</p>
<div class="buttons">
<div id="fans_count">3300 подписчиков</div>
<input type="button" id="addCompanyFan" data-id="2" class="blue " title="Мне нравится компания" value="Подписаться">
<input type="button" id="removeCompanyFan" data-id="2" class="hidden" title="Компания мне больше не нравится" value="Подписан">
</div>
</div>
</div>
<div class="block new_vacanies">
<a href="http://brainstorage.me/jobs" class="title">Brainstorage</a>
<div class="vacancies">
<div class="job_item ">
<a href="http://brainstorage.me/jobs/18227">Программист DRUPAL</a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/10657">Senior Graphics Programmer</a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/18213">Java Developer в Департамент систем автоматизации ИТ </a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/18211">Java Architect в Департамент систем автоматизации ИТ</a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/16247">Разработчик C++ (Яндекс.Острова)</a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/16297">Старший разработчик поиска </a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/16315">Разработчик распределенной системы хранения и обработки данных</a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/16481">Разработчик веб-робота</a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/16593">Разработчик Яндекс.Диска (C++)</a>
</div>
<div class="job_item ">
<a href="http://brainstorage.me/jobs/15747">PHP-разработчик</a>
</div>
</div>
<div class="all"><a href="http://brainstorage.me/jobs">все вакансии</a></div>
</div>
<div class="block freelansim">
<a href="http://freelansim.ru/" class="title"></a>
<div class="tasks">
<div class="task ">
<a href="http://freelansim.ru/tasks/65899">Организовать колл центр</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65895">Доска объявлений</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65891">Установить и настроить Google Analytics</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65887">Необходимо спарсить данные с сайта биржи</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65877">Доработать jQuery - компонет Select2 - SCSS и JS</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65875">Модель угроз и требования для backup приложения</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65873">Разработка трехзвенной архитектуры</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65859">Написать первую теоретическую главу диплома по теме: "Технико экономическое обоснование..." </a>
</div>
<div class="task marked">
<a href="http://freelansim.ru/tasks/55298">Блок + админка</a>
</div>
<div class="task ">
<a href="http://freelansim.ru/tasks/65847">Составление описания товаров</a>
</div>
</div>
<div class="all"><a href="http://freelansim.ru/tasks">все заказы</a></div>
</div>
<div class="block similar_events">
<div class="title">Ближайшие события</div>
<div class="events_items">
<div class="event_item">
<div class="date">
<div class="dayname dayname_1"></div>
<div class="day">28</div>
<div class="month">апр</div>
</div>
<div class="title">
<a href="http://habrahabr.ru/events/4791/">Основы ITILv3 — 2011</a>
</div>
</div>
<div class="event_item">
<div class="date">
<div class="dayname dayname_1"></div>
<div class="day">28</div>
<div class="month">апр</div>
</div>
<div class="title">
<a href="http://habrahabr.ru/events/4863/">Интернет-конференция «Открытые инновации: данные должны работать!»</a>
</div>
</div>
<div class="event_item">
<div class="date">
<div class="dayname dayname_2"></div>
<div class="day">29</div>
<div class="month">апр</div>
</div>
<div class="title">
<a href="http://habrahabr.ru/events/4665/">Вебинар: Nokia Notifications API для платформы Nokia X</a>
</div>
</div>
<div class="event_item">
<div class="date">
<div class="dayname dayname_2"></div>
<div class="day">29</div>
<div class="month">апр</div>
</div>
<div class="title">
<a href="http://habrahabr.ru/events/4911/">Webinar: облачная инфраструктура в 3 клика. На примере 1С в облаке.</a>
</div>
</div>
<div class="event_item">
<div class="date">
<div class="dayname dayname_2"></div>
<div class="day">29</div>
<div class="month">апр</div>
</div>
<div class="title">
<a href="http://habrahabr.ru/events/4861/">Третья конференция «Дорога в облака»: Big Data &amp; OpenStack!</a>
</div>
</div>
</div>
<div class="all"><a href="http://habrahabr.ru/events/">все события</a></div>
</div>
</div>
<div class="clear"></div>
<script>
// hubs to GA
ga('send', 'event', 'Post_view', 'programming (Программирование)', window.location.pathname + window.location.search);
</script>
<div class="rotated_posts">
<div class="rotated_post ">
<a href="http://habrahabr.ru/company/gtv/blog/208168/" class="grey">Как мы самостоятельно, без издательства, выпустили книгу</a>
</div>
<div class="rotated_post ">
<a href="http://habrahabr.ru/company/yandex/blog/209324/" class="grey">Облачная платформа Яндекса. Cocaine</a>
</div>
<div class="rotated_post last">
<a href="http://habrahabr.ru/company/yandex/blog/208034/" class="grey">Machine Learning. Курс от Яндекса для тех, кто хочет провести новогодние каникулы с пользой</a>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
// test gggg
// настройки всплывающих уведомлений
$.jGrowl.defaults.closerTemplate = '<div>Закрыть все уведомления</div>';
// настройки тултипов
$(".help-tip").tipTip({maxWidth: "300px", edgeOffset: 10});
});
// global vars
var g_base_url = 'habrahabr.ru';
var g_show_xpanel = true;
var g_base_fullurl = 'http://habrahabr.ru/';
var g_is_guest = true;
var g_user_login = 'philpirj';
var g_user_id = 60619;
var g_user_avatar = '//habrastorage.org/getpro/habr/avatars/f50/b74/462/f50b744625ff1e41ec0bdbb754b62824_small.jpg';
</script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/shortcuts.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/float_block.js"></script>
<script type="text/javascript" src="./Пишем HTTP proxy сервер с плагинами Хабрахабр_files/saved_resource"></script>
<div id="footer">
<dl class="user">
<dt><a href="http://habrahabr.ru/users/philpirj/">philpirj</a></dt>
<dd><a href="http://habrahabr.ru/tracker/">Трекер</a></dd>
<dd><a href="http://habrahabr.ru/topic/add/">Написать</a></dd>
<dd><a href="http://habrahabr.ru/conversations/">Cообщения</a></dd>
<dd><a href="https://habrahabr.ru/auth/settings/">Настройки</a></dd>
<dd><a href="http://habrahabr.ru/ppa/">ППА</a></dd>
</dl>
<dl>
<dt>Разделы</dt>
<!--dd><a href="http://habrahabr.ru/qa/">Q&A</a></dd-->
<dd><a href="http://habrahabr.ru/hubs/">Хабы</a></dd>
<dd><a href="http://habrahabr.ru/events/">События</a></dd>
<dd><a href="http://habrahabr.ru/companies/">Компании</a></dd>
<dd><a href="http://habrahabr.ru/users/">Пользователи</a></dd>
</dl>
<dl>
<dt>Посты</dt>
<dd><a href="http://habrahabr.ru/feed/">Лента</a></dd>
<dd><a href="http://habrahabr.ru/posts/top/">Лучшие</a></dd>
<dd><a href="http://habrahabr.ru/posts/collective/">Тематические</a></dd>
<dd><a href="http://habrahabr.ru/posts/corporative/">Корпоративные</a></dd>
<dd><a href="http://habrahabr.ru/sandbox/">Песочница</a></dd>
</dl>
<dl>
<dt>Инфо</dt>
<dd><a href="http://habrahabr.ru/info/about/">О сайте</a></dd>
<dd><a href="http://habrahabr.ru/info/help/rules/">Правила</a></dd>
<dd><a href="http://habrahabr.ru/info/help/">Помощь</a></dd>
<dd><a href="http://habrahabr.ru/info/agreement/">Соглашение</a></dd>
</dl>
<dl>
<dt>Услуги</dt>
<dd><a href="http://habrahabr.ru/info/advertising/">Реклама</a></dd>
<dd><a href="http://habrahabr.ru/info/advertising/corporate/">Корпоративные тарифы</a></dd>
<dd><a href="http://habrahabr.ru/info/advertising/workshops/">Семинары</a></dd>
<dd><a href="http://habrahabr.ru/special/">Спецпроекты</a></dd>
<dd><a href="http://habrahabr.ru/special/minsvyaz/" style="color:green;">Льготы стартапам</a></dd>
</dl>
<div class="copyright">
<div class="about">
<a href="http://tmtm.ru/">TM</a>
© 2006–2014
<br><br>
<a href="http://habrahabr.ru/feedback/">Служба поддержки</a><br><br>
<a href="http://m.habrahabr.ru/">Мобильная версия</a><br><br>
<a href="http://habrahabr.ru/apps/" style="color: #e95e51;">Мобильные приложения</a><br><br>
<div class="social_accounts">
<a href="https://twitter.com/habrahabr" class="tw"></a>
<a href="https://www.facebook.com/habrahabr.ru" class="fb"></a>
<a href="http://vk.com/habr" class="vk"></a>
<!-- <a href="" class="gp"></a> //-->
</div>
</div>
</div>
</div>
<div class="footer_logos">
<div class="project brainstorage">
<a href="http://brainstorage.ru/" class="icon "></a>
<div class="text">Все мозги в одном месте</div>
</div>
<div class="project toster">
<a href="http://toster.ru/" class="icon "></a>
<div class="text">Q&amp;A-сервис для разработчиков</div>
</div>
<div class="project freelansim">
<a href="http://freelansim.ru/" class="icon "></a>
<div class="text">Заказы для фрилансеров</div>
</div>
<div class="project autokadabra">
<a href="http://autokadabra.ru/" class="icon "></a>
<div class="text ">Уютная и дружелюбная</div>
</div>
</div>
<div id="AutocompleteContainter_f604c" style="position: absolute; z-index: 9999; top: 51px; left: 1127.5px;"><div class="autocomplete-w1"><div class="autocomplete" id="Autocomplete_f604c" style="display: none; width: 300px; max-height: 400px;"></div></div></div><div id="AutocompleteContainter_75cd0" style="position: absolute; z-index: 9999; top: 2px; left: 0px;"><div class="autocomplete-w1"><div class="autocomplete" id="Autocomplete_75cd0" style="display: none; width: 300px; max-height: 400px;"></div></div></div><div id="xpanel" style="right: 0px;"><a href="http://habrahabr.ru/post/111569/#refresh" class="refresh"></a><div class="divider" style="display: none;"></div><a href="http://habrahabr.ru/post/111569/#new" class="new" style="display: none;">0</a></div><div id="tiptip_holder" style="max-width:300px;"><div id="tiptip_arrow"><div id="tiptip_arrow_inner"></div></div><div id="tiptip_content"></div></div></body></html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment