<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>по стопам webkill&#039;а &#187; socks5</title>
	<atom:link href="http://blog.lukmus.ru/tag/socks5/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lukmus.ru</link>
	<description>это наш химический дом для печальных жителей Земли</description>
	<lastBuildDate>Sat, 21 Oct 2023 19:10:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Mechanize через SOCKS5 или парсим Tor</title>
		<link>http://blog.lukmus.ru/2016/03/05/mechanize-socks/</link>
		<comments>http://blog.lukmus.ru/2016/03/05/mechanize-socks/#comments</comments>
		<pubDate>Sat, 05 Mar 2016 17:54:48 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[mechanize]]></category>
		<category><![CDATA[socks5]]></category>
		<category><![CDATA[tor]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=2400</guid>
		<description><![CDATA[Незаменимый для парсинга гем Mechanize, эмулирующий браузер, по умолчанию поддерживает только обычные прокси. Широкой общественности известен факт, что для подключения к Tor-сайтам используется SOCKS5, который организуется через Privoxy. Этот пост повествует как заставить Mechanize подключиться к Tor-сайтам. Обычный запрос Mechanize&#8217;а через прокси имеет вид что-то типа: 1 2 3 browser = Mechanize.new browser.agent.set_proxy&#40;host,port&#41; page=browser.get 'http://lukmus.ru' [...]]]></description>
			<content:encoded><![CDATA[<p>Незаменимый для парсинга гем <a href="https://github.com/sparklemotion/mechanize" rel="nofollow" target="_blank">Mechanize</a>, эмулирующий браузер, по умолчанию поддерживает только обычные прокси. Широкой общественности известен факт, что для подключения к Tor-сайтам используется SOCKS5, который организуется через <a href="http://blog.lukmus.ru/2013/03/16/ustanovka-torprivoxy-na-centos-6/">Privoxy</a>. Этот пост повествует как заставить Mechanize подключиться к Tor-сайтам.<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2016/03/m1000x1000.jpg" alt="" /><span id="more-2400"></span><br />
Обычный запрос Mechanize&#8217;а через прокси имеет вид что-то типа:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">browser = Mechanize.<span style="color:#9900CC;">new</span>
browser.<span style="color:#9900CC;">agent</span>.<span style="color:#9900CC;">set_proxy</span><span style="color:#006600; font-weight:bold;">&#40;</span>host,port<span style="color:#006600; font-weight:bold;">&#41;</span>
page=browser.<span style="color:#9900CC;">get</span> <span style="color:#996600;">'http://lukmus.ru'</span></pre></td></tr></table></div>

<p>Жизнь была бы проще если бы мы могли заменить метод <code>set_proxy</code> класса <code>Mechanize::HTTP::Agent</code> на аналогичный <code>set_socks</code>, но такого метода в этом классе нет. Однако его можно дописать самому, например вот так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;socksify&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'socksify/http'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#6666ff; font-weight:bold;">Faraday::Adapter::NetHttp</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> net_http_class<span style="color:#006600; font-weight:bold;">&#40;</span>env<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> proxy = env<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:request</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:proxy</span><span style="color:#006600; font-weight:bold;">&#93;</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> proxy<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:uri</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">scheme</span> == <span style="color:#996600;">'socks'</span>
        <span style="color:#6666ff; font-weight:bold;">Net::HTTP::SOCKSProxy</span><span style="color:#006600; font-weight:bold;">&#40;</span>proxy<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:uri</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">host</span>, proxy<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:uri</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">port</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">else</span>
        <span style="color:#6666ff; font-weight:bold;">Net::HTTP::Proxy</span><span style="color:#006600; font-weight:bold;">&#40;</span>proxy<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:uri</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">host</span>, proxy<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:uri</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">port</span>, proxy<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:user</span><span style="color:#006600; font-weight:bold;">&#93;</span>, proxy<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:password</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#6666ff; font-weight:bold;">Mechanize::HTTP::Agent</span>
&nbsp;
  public
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> set_socks addr, port
    set_http <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#0066ff; font-weight:bold;">@http</span>
    <span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#0066ff; font-weight:bold;">@http</span>
      attr_accessor <span style="color:#ff3333; font-weight:bold;">:socks_addr</span>, <span style="color:#ff3333; font-weight:bold;">:socks_port</span>
&nbsp;
      <span style="color:#9966CC; font-weight:bold;">def</span> http_class
        <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">SOCKSProxy</span><span style="color:#006600; font-weight:bold;">&#40;</span>socks_addr, socks_port<span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#0066ff; font-weight:bold;">@http</span>.<span style="color:#9900CC;">socks_addr</span> = addr
    <span style="color:#0066ff; font-weight:bold;">@http</span>.<span style="color:#9900CC;">socks_port</span> = port
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Как подключать файлы, с содержанием подобному выше, к Rails-приложению каждый знает и без меня.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2016/03/m1000x1000.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2016/03/05/mechanize-socks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
