treat 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,399 @@
1
+ <!doctype html>
2
+
3
+ <!--[if lt IE 7 ]> <html lang="en" class="ie6"> <![endif]-->
4
+ <!--[if IE 7 ]> <html lang="en" class="ie7"> <![endif]-->
5
+ <!--[if IE 8 ]> <html lang="en" class="ie8"> <![endif]-->
6
+ <!--[if IE 9 ]> <html lang="en" class="ie9"> <![endif]-->
7
+ <!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
8
+
9
+ <head>
10
+ <meta charset="utf-8">
11
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12
+ <title>Net::HTTP Cheat Sheet</title>
13
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
14
+ <link rel="icon" href="/favicon.png" type="image/png">
15
+ <link rel="shortcut icon" href="/favicon.png" type="image/png">
16
+ <link rel="alternate" type="application/rss+xml" title="Ruby Inside" href="http://www.rubyinside.com/feed/" />
17
+ <link rel="stylesheet" href="http://www.rubyinside.com/wp-content/themes/ri2011/css/ri.css">
18
+ <!-- script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script -->
19
+ <script type="text/javascript" src="http://use.typekit.com/dmj7czx.js"></script>
20
+ <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
21
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
22
+
23
+ <!--[if lt IE 9]>
24
+ <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
25
+ <![endif]-->
26
+ </head>
27
+
28
+ <body class="single single-post postid-2940 single-format-standard">
29
+ <div id="superheader">Want to stay on top? <a href="http://rubyweekly.com/?m">Ruby Weekly</a> is a once-weekly e-mail newsletter covering the latest Ruby and Rails news.</div>
30
+ <div id="container">
31
+ <div class="outerheader top">
32
+ <div class="right"><form method="get" id="searchform" action="/"><input type="text" value="" name="s" id="s" size="24" /><input type="submit" id="searchsubmit" value="Search" /></form>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.rubyinside.com/feed/"><img src="http://feeds2.feedburner.com/~fc/RubyInside?bg=99CCFF&fg=333333&anim=0" align="top" alt="Feed Icon" /></a></div>
33
+ <a href="/"><img src="http://www.rubyinside.com/wp-content/themes/ri2011/css/logo.png" id="logo" alt="Ruby Inside - A Ruby Blog" /></a>
34
+ </div>
35
+
36
+ <div class="outerheader masthead">
37
+ <div class="menu">
38
+ <ul>
39
+ <li><a href="/" class="home">Home</a></li> <li><a href="/about/">About</a></li>
40
+ <li><a href="/archives/">Archives</a></li>
41
+ <!-- li><a href="/advertise/">Advertising</a></li -->
42
+ <li><a href="http://jobs.rubyinside.com/">Ruby and Rails Jobs</a></li>
43
+ <li class="right"><a href="/feed/">RSS</a> <!-- span class="count">(24146)</span --></li>
44
+ <li class="right">
45
+ </li>
46
+ <li class="right"><a href="http://twitter.com/rubyinside">Follow us on Twitter</a> <!-- span class="count">(5548)</span --></li>
47
+ </ul>
48
+ </div>
49
+
50
+
51
+ </div>
52
+
53
+ <div id="innercontainer"><div id="page">
54
+
55
+
56
+ <div id="sidebar">
57
+ <div style="margin-top: 12px"><a href="http://twitter.com/RubyInside" class="twitter-follow-button">Follow @RubyInside</a>
58
+ <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script></div>
59
+ <div id="text-3" class="widget-container section widget_text"> <div class="textwidget"><div class="adzerk left" id="adzerk1"></div><div class="adzerk right" id="adzerk2"></div>
60
+ <div class="adzerk left" id="adzerk3"></div><div class="adzerk right" id="adzerk4"></div>
61
+ <div class="adzerk left" id="adzerk5"></div><div class="adzerk right" id="adzerk6"></div>
62
+ <div class="adzerk left" id="adzerk7"></div><div class="adzerk right" id="adzerk8"></div>
63
+ <br />
64
+ <!-- a href="http://owningrails.com/?ref=5905208113"><img src="http://owningrails.com/images/ad-with.png" /></a -->
65
+ <!-- a href="http://rubyweekly.com/"><img src="http://rubyinside.com/wp-content/themes/ri20102/images/rw-ri-box.gif" /></a --></div>
66
+ </div><div id="execphp-3" class="widget-container section widget_execphp">
67
+ <div class="execphpwidget"> <h3><a href="http://jobs.rubyinside.com/">Ruby and Rails Jobs</a></h3>
68
+ <div class="inner">
69
+ <ul>
70
+ <!-- ? readfile('http://www.rubyinside.com/jobs.html'); ? -->
71
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/682957">Senior Ruby Engineer</a></div><div class='company'>Samasource</div><div class="location">San Francisco, California</div></li>
72
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/695510">Ruby on Rails Developer (multiple openings)</a></div><div class='company'>Coupa Software</div><div class="location">San Mateo, California</div></li>
73
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/687348">Senior Developer (Open Source\Mobile App)</a></div><div class='company'>AT</div><div class="location">Palo Alto, California</div></li>
74
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/687465">Senior Ruby on Rails Engineer</a></div><div class='company'>Dish Online</div><div class="location">Louisville, Colorado</div></li>
75
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/688167">Ruby Developer for Leading Social Media Tech Co.</a></div><div class='company'>Wildfire</div><div class="location">Redwood City, California</div></li>
76
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/681975">Senior Web Engineer for Rapidly-Growing Education Business</a></div><div class='company'>Steve and Kate's Camp</div><div class="location">Sausalito, California</div></li>
77
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/696150">Rails Developer</a></div><div class='company'>Jingle Punks Music, LLC</div><div class="location">New York, New York</div></li>
78
+ <li><div class='link'><a href="http://jobs.rubyinside.com/a/jbb/job-details/689457">Senior Software Engineer</a></div><div class='company'>Zendesk</div><div class="location">San Francisco, California</div></li>
79
+ <div class="minor"><a href="http://ruby.jobamatic.com/">More jobs &raquo;</a> : <a href="/post-a-job">Post a Job</a></div>
80
+ </div>
81
+ </div>
82
+ </div>
83
+
84
+ <!-- if (is_front_page() && !is_paged()) { -->
85
+ </div>
86
+
87
+ <div id="main">
88
+
89
+
90
+
91
+ <div class="post-2940 post type-post status-publish format-standard hentry category-reference" id="post-2940">
92
+
93
+ <div class="content">
94
+
95
+ <div class="title"><h2>Net::HTTP Cheat Sheet</h2></div>
96
+
97
+ <p class="author">By <a href="http://www.rubyinside.com/author/admin" title="View all posts by Peter Cooper">Peter Cooper</a> <span class="date">/ January 16, 2010</span></p>
98
+ <div id="thecontent"><p><img src="http://www.rubyinside.com/wp-content/uploads/2010/01/http-is-a-hamster-on-rollerblades-says-marc-andre-cournoyer.gif" width="120" height="120" alt="http-is-a-hamster-on-rollerblades-says-marc-andre-cournoyer.gif" style="float:left; margin-right:12px; margin-bottom:12px; border:1px #000000 solid;" />Norwegian Rubyist <a href="http://august.lilleaas.net/">August Lilleaas</a> has been busy putting together <a href="http://github.com/augustl/net-http-cheat-sheet">a ton of examples</a> of using the <a href="http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html">Net::HTTP</a> Ruby library that comes with most Ruby distributions. I asked him if it'd be okay to put some of them directly on Ruby Inside for reference purposes and he said "No problem!"</p>
99
+ <p>It's worth noting that Net::HTTP has been superseded in many areas by libraries like John Nunemaker's <a href="http://github.com/jnunemaker/httparty">HTTParty</a> and Paul DIx's high performance <a href="http://github.com/pauldix/typhoeus">Typhoeus</a>, but as part of the standard library, Net::HTTP is still a popular option though it doesn't have the easiest API to remember.</p>
100
+ <p>Here's a selection of August's examples for some of the most common operations. Want to see <i>all</i> of the examples and follow any updates made to them? Check out August's <a href="http://github.com/augustl/net-http-cheat-sheet">net-http-cheat-sheet GitHub repo</a>.</p>
101
+ <h3>Standard HTTP Request</h3>
102
+ <pre><span class="ident">require</span> <span class="punct">"</span><span class="string">net/http</span><span class="punct">"</span>
103
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">uri</span><span class="punct">"</span>
104
+
105
+ <span class="ident">uri</span> <span class="punct">=</span> <span class="constant">URI</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">http://google.com/</span><span class="punct">")</span>
106
+
107
+ <span class="comment"># Shortcut</span>
108
+ <span class="ident">response</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">get_response</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">)</span>
109
+
110
+ <span class="comment"># Will print response.body</span>
111
+ <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">get_print</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">)</span>
112
+
113
+ <span class="comment"># Full</span>
114
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">host</span><span class="punct">,</span> <span class="ident">uri</span><span class="punct">.</span><span class="ident">port</span><span class="punct">)</span>
115
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Get</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">request_uri</span><span class="punct">))</span></pre>
116
+ <h3>Basic Auth</h3>
117
+ <pre><span class="ident">require</span> <span class="punct">"</span><span class="string">net/http</span><span class="punct">"</span>
118
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">uri</span><span class="punct">"</span>
119
+
120
+ <span class="ident">uri</span> <span class="punct">=</span> <span class="constant">URI</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">http://google.com/</span><span class="punct">")</span>
121
+
122
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">host</span><span class="punct">,</span> <span class="ident">uri</span><span class="punct">.</span><span class="ident">port</span><span class="punct">)</span>
123
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Get</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">request_uri</span><span class="punct">)</span>
124
+ <span class="ident">request</span><span class="punct">.</span><span class="ident">basic_auth</span><span class="punct">("</span><span class="string">username</span><span class="punct">",</span> <span class="punct">"</span><span class="string">password</span><span class="punct">")</span>
125
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span></pre>
126
+ <h3>Dealing with response objects</h3>
127
+ <pre><span class="ident">require</span> <span class="punct">"</span><span class="string">net/http</span><span class="punct">"</span>
128
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">uri</span><span class="punct">"</span>
129
+
130
+ <span class="ident">uri</span> <span class="punct">=</span> <span class="constant">URI</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">http://google.com/</span><span class="punct">")</span>
131
+
132
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">host</span><span class="punct">,</span> <span class="ident">uri</span><span class="punct">.</span><span class="ident">port</span><span class="punct">)</span>
133
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Get</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">request_uri</span><span class="punct">)</span>
134
+
135
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span>
136
+
137
+ <span class="ident">response</span><span class="punct">.</span><span class="ident">code</span> <span class="comment"># => 301</span>
138
+ <span class="ident">response</span><span class="punct">.</span><span class="ident">body</span> <span class="comment"># => The body (HTML, XML, blob, whatever)</span>
139
+ <span class="comment"># Headers are lowercased</span>
140
+ <span class="ident">response</span><span class="punct">["</span><span class="string">cache-control</span><span class="punct">"]</span> <span class="comment"># => public, max-age=2592000</span></pre>
141
+ <h3>POST form request</h3>
142
+ <pre><span class="ident">require</span> <span class="punct">"</span><span class="string">net/http</span><span class="punct">"</span>
143
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">uri</span><span class="punct">"</span>
144
+
145
+ <span class="ident">uri</span> <span class="punct">=</span> <span class="constant">URI</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">http://example.com/search</span><span class="punct">")</span>
146
+
147
+ <span class="comment"># Shortcut</span>
148
+ <span class="ident">response</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">post_form</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">,</span> <span class="punct">{"</span><span class="string">q</span><span class="punct">"</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">My query</span><span class="punct">",</span> <span class="punct">"</span><span class="string">per_page</span><span class="punct">"</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">50</span><span class="punct">"})</span>
149
+
150
+ <span class="comment"># Full control</span>
151
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">host</span><span class="punct">,</span> <span class="ident">uri</span><span class="punct">.</span><span class="ident">port</span><span class="punct">)</span>
152
+
153
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Post</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">request_uri</span><span class="punct">)</span>
154
+ <span class="ident">request</span><span class="punct">.</span><span class="ident">set_form_data</span><span class="punct">({"</span><span class="string">q</span><span class="punct">"</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">My query</span><span class="punct">",</span> <span class="punct">"</span><span class="string">per_page</span><span class="punct">"</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">50</span><span class="punct">"})</span>
155
+
156
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span></pre>
157
+ <h3>File upload - input type="file" style</h3>
158
+ <pre><span class="ident">require</span> <span class="punct">"</span><span class="string">net/http</span><span class="punct">"</span>
159
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">uri</span><span class="punct">"</span>
160
+
161
+ <span class="comment"># Token used to terminate the file in the post body. Make sure it is not</span>
162
+ <span class="comment"># present in the file you're uploading.</span>
163
+ <span class="constant">BOUNDARY</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">AaB03x</span><span class="punct">"</span>
164
+
165
+ <span class="ident">uri</span> <span class="punct">=</span> <span class="constant">URI</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">http://something.com/uploads</span><span class="punct">")</span>
166
+ <span class="ident">file</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">/path/to/your/testfile.txt</span><span class="punct">"</span>
167
+
168
+ <span class="ident">post_body</span> <span class="punct">=</span> <span class="punct">[]</span>
169
+ <span class="ident">post_body</span> <span class="punct">< <</span> <span class="punct">"</span><span class="string">--<span class="expr">#{BOUNDARY}</span><span class="escape">rn</span></span><span class="punct">"</span>
170
+ <span class="ident">post_body</span> <span class="punct">< <</span> <span class="punct">"</span><span class="string">Content-Disposition: form-data; name=<span class="escape">"</span>datafile<span class="escape">"</span>; filename=<span class="escape">"</span><span class="expr">#{File.basename(file)}</span><span class="escape">"rn</span></span><span class="punct">"</span>
171
+ <span class="ident">post_body</span> <span class="punct">< <</span> <span class="punct">"</span><span class="string">Content-Type: text/plain<span class="escape">rn</span></span><span class="punct">"</span>
172
+ <span class="ident">post_body</span> <span class="punct">< <</span> <span class="punct">"</span><span class="string"><span class="escape">rn</span></span><span class="punct">"</span>
173
+ <span class="ident">post_body</span> <span class="punct">< <</span> <span class="constant">File</span><span class="punct">.</span><span class="ident">read</span><span class="punct">(</span><span class="ident">file</span><span class="punct">)</span>
174
+ <span class="ident">post_body</span> <span class="punct">< <</span> <span class="punct">"</span><span class="string"><span class="escape">rn</span>--<span class="expr">#{BOUNDARY}</span>--<span class="escape">rn</span></span><span class="punct">"</span>
175
+
176
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">host</span><span class="punct">,</span> <span class="ident">uri</span><span class="punct">.</span><span class="ident">port</span><span class="punct">)</span>
177
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Post</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">request_uri</span><span class="punct">)</span>
178
+ <span class="ident">request</span><span class="punct">.</span><span class="ident">body</span> <span class="punct">=</span> <span class="ident">post_body</span><span class="punct">.</span><span class="ident">join</span>
179
+ <span class="ident">request</span><span class="punct">["</span><span class="string">Content-Type</span><span class="punct">"]</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">multipart/form-data, boundary=<span class="expr">#{BOUNDARY}</span></span><span class="punct">"</span>
180
+
181
+ <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span></span></span></span></span></span></span></pre>
182
+ <h3>SSL/HTTPS request</h3>
183
+ <p><strong>Update: There are some good reasons why this code example is bad. It introduces a potential security vulnerability if it's essential you use the server certificate to verify the identity of the server you're connecting to. There's <a href="http://www.rubyinside.com/how-to-cure-nethttps-risky-default-https-behavior-4010.html">a fix for the issue though!</a></strong></p>
184
+ <pre><span class="ident">require</span> <span class="punct">"</span><span class="string">net/https</span><span class="punct">"</span>
185
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">uri</span><span class="punct">"</span>
186
+
187
+ <span class="ident">uri</span> <span class="punct">=</span> <span class="constant">URI</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">https://secure.com/</span><span class="punct">")</span>
188
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">host</span><span class="punct">,</span> <span class="ident">uri</span><span class="punct">.</span><span class="ident">port</span><span class="punct">)</span>
189
+ <span class="ident">http</span><span class="punct">.</span><span class="ident">use_ssl</span> <span class="punct">=</span> <span class="constant">true</span>
190
+ <span class="ident">http</span><span class="punct">.</span><span class="ident">verify_mode</span> <span class="punct">=</span> <span class="constant">OpenSSL</span><span class="punct">::</span><span class="constant">SSL</span><span class="punct">::</span><span class="constant">VERIFY_NONE</span>
191
+
192
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Get</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">request_uri</span><span class="punct">)</span>
193
+
194
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span>
195
+ <span class="ident">response</span><span class="punct">.</span><span class="ident">body</span>
196
+ <span class="ident">response</span><span class="punct">.</span><span class="ident">status</span>
197
+ <span class="ident">response</span><span class="punct">["</span><span class="string">header-here</span><span class="punct">"]</span> <span class="comment"># All headers are lowercase</span></pre>
198
+ <h3>SSL/HTTPS request with PEM certificate</h3>
199
+ <pre><span class="ident">require</span> <span class="punct">"</span><span class="string">net/https</span><span class="punct">"</span>
200
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">uri</span><span class="punct">"</span>
201
+
202
+ <span class="ident">uri</span> <span class="punct">=</span> <span class="constant">URI</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">https://secure.com/</span><span class="punct">")</span>
203
+ <span class="ident">pem</span> <span class="punct">=</span> <span class="constant">File</span><span class="punct">.</span><span class="ident">read</span><span class="punct">("</span><span class="string">/path/to/my.pem</span><span class="punct">")</span>
204
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">host</span><span class="punct">,</span> <span class="ident">uri</span><span class="punct">.</span><span class="ident">port</span><span class="punct">)</span>
205
+ <span class="ident">http</span><span class="punct">.</span><span class="ident">use_ssl</span> <span class="punct">=</span> <span class="constant">true</span>
206
+ <span class="ident">http</span><span class="punct">.</span><span class="ident">cert</span> <span class="punct">=</span> <span class="constant">OpenSSL</span><span class="punct">::</span><span class="constant">X509</span><span class="punct">::</span><span class="constant">Certificate</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">pem</span><span class="punct">)</span>
207
+ <span class="ident">http</span><span class="punct">.</span><span class="ident">key</span> <span class="punct">=</span> <span class="constant">OpenSSL</span><span class="punct">::</span><span class="constant">PKey</span><span class="punct">::</span><span class="constant">RSA</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">pem</span><span class="punct">)</span>
208
+ <span class="ident">http</span><span class="punct">.</span><span class="ident">verify_mode</span> <span class="punct">=</span> <span class="constant">OpenSSL</span><span class="punct">::</span><span class="constant">SSL</span><span class="punct">::</span><span class="constant">VERIFY_PEER</span>
209
+
210
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Get</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">uri</span><span class="punct">.</span><span class="ident">request_uri</span><span class="punct">)</span></pre>
211
+ <h3>REST methods</h3>
212
+ <pre><span class="comment"># Basic REST.</span>
213
+ <span class="comment"># Most REST APIs will set semantic values in response.body and response.code.</span>
214
+ <span class="ident">require</span> <span class="punct">"</span><span class="string">net/http</span><span class="punct">"</span>
215
+
216
+ <span class="ident">http</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">.</span><span class="ident">new</span><span class="punct">("</span><span class="string">api.restsite.com</span><span class="punct">")</span>
217
+
218
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Post</span><span class="punct">.</span><span class="ident">new</span><span class="punct">("</span><span class="string">/users</span><span class="punct">")</span>
219
+ <span class="ident">request</span><span class="punct">.</span><span class="ident">set_form_data</span><span class="punct">({"</span><span class="string">users[login]</span><span class="punct">"</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">quentin</span><span class="punct">"})</span>
220
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span>
221
+ <span class="comment"># Use nokogiri, hpricot, etc to parse response.body.</span>
222
+
223
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Get</span><span class="punct">.</span><span class="ident">new</span><span class="punct">("</span><span class="string">/users/1</span><span class="punct">")</span>
224
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span>
225
+ <span class="comment"># As with POST, the data is in response.body.</span>
226
+
227
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Put</span><span class="punct">.</span><span class="ident">new</span><span class="punct">("</span><span class="string">/users/1</span><span class="punct">")</span>
228
+ <span class="ident">request</span><span class="punct">.</span><span class="ident">set_form_data</span><span class="punct">({"</span><span class="string">users[login]</span><span class="punct">"</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">changed</span><span class="punct">"})</span>
229
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span>
230
+
231
+ <span class="ident">request</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">HTTP</span><span class="punct">::</span><span class="constant">Delete</span><span class="punct">.</span><span class="ident">new</span><span class="punct">("</span><span class="string">/users/1</span><span class="punct">")</span>
232
+ <span class="ident">response</span> <span class="punct">=</span> <span class="ident">http</span><span class="punct">.</span><span class="ident">request</span><span class="punct">(</span><span class="ident">request</span><span class="punct">)</span></pre>
233
+ <p>There are more in August's repo if you want to keep browsing..</p>
234
+ <p style="background-color: #ffc; font-weight: bold; font-size: 13px; color: #000;">Job: New Relic is <a href="http://ruby.jobamatic.com/a/jbb/job-details/165476">looking for a Ruby on Rails developer in Portland, Oregon.</a></p>
235
+ </div>
236
+
237
+
238
+
239
+
240
+ <!-- div style="margin-bottom: 8px; background-color: #ffc; text-align: center; padding: 6px"><a href="http://zfer.us/EKm97" style="text-decoration: none; margin: 0; padding: 0" rel="nofollow"><img src="http://www.rubyinside.com/images/railstutorial-box.gif" /></a></div -->
241
+ <!-- <a href="http://www.rubyinside.com/19walkthrough/"><img src="http://www.rubyinside.com/images/19pro.gif" /></a> -->
242
+
243
+
244
+
245
+
246
+
247
+ </div>
248
+ </div>
249
+
250
+ <div id="related"><h3>Related Posts</h3><ul><li><a href='http://www.rubyinside.com/cheat-sheet-for-rest-on-rails-261.html' rel='bookmark' title='Cheat Sheet for REST on Rails'>Cheat Sheet for REST on Rails</a></li>
251
+ <li><a href='http://www.rubyinside.com/quick-ruby-reference-cheat-sheet-47.html' rel='bookmark' title='Quick Ruby Reference / Cheat Sheet'>Quick Ruby Reference / Cheat Sheet</a></li>
252
+ <li><a href='http://www.rubyinside.com/ruby-on-rails-testing-cheat-sheet-206.html' rel='bookmark' title='Ruby on Rails Testing Cheat Sheet'>Ruby on Rails Testing Cheat Sheet</a></li>
253
+ </ul></div>
254
+ <div id="commentzone">
255
+
256
+
257
+
258
+ <h3 id="comments-title">Comments</h3>
259
+
260
+ <ol class="commentlist">
261
+ <li class="comment even thread-even depth-1" id="comment-40542">
262
+ <img alt='' src='http://0.gravatar.com/avatar/6268c7528d855f1cef5696a00d159909?s=64&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=G' class='avatar avatar-64 photo' height='64' width='64' /> <cite><a href='http://twitter.com/peterc' rel='external nofollow' class='url'>Peter Cooper</a> says:</cite><br />
263
+
264
+ <small class="commentmetadata">January 16, 2010 at 1:02 am</small>
265
+
266
+
267
+ <p>The idea for the hamster on rollerskates issue can be discovered by checking out its filename.. :-)</p>
268
+
269
+
270
+ </li> <li class="comment odd alt thread-odd thread-alt depth-1" id="comment-40546">
271
+ <img alt='' src='http://0.gravatar.com/avatar/aa31b79adedc3f60547769f1a8971ba6?s=64&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=G' class='avatar avatar-64 photo' height='64' width='64' /> <cite><a href='http://emmanueloga@gmail.com' rel='external nofollow' class='url'>Emmanuel</a> says:</cite><br />
272
+
273
+ <small class="commentmetadata">January 16, 2010 at 3:50 pm</small>
274
+
275
+
276
+ <p>Anybody knows if the HTTP::Net issues related with Timeout is still present in all (or any) ruby versions?</p>
277
+ <p><a href="http://blog.headius.com/2008/02/rubys-threadraise-threadkill-timeoutrb.html" rel="nofollow">http://blog.headius.com/2008/02/rubys-threadraise-threadkill-timeoutrb.html</a></p>
278
+
279
+
280
+ </li> <li class="comment even thread-even depth-1" id="comment-40550">
281
+ <img alt='' src='http://0.gravatar.com/avatar/2bfc6436d28fc4a224e3ff1702a046d0?s=64&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=G' class='avatar avatar-64 photo' height='64' width='64' /> <cite>ratbeard says:</cite><br />
282
+
283
+ <small class="commentmetadata">January 17, 2010 at 4:23 pm</small>
284
+
285
+
286
+ <p>Another library that abstracts over Net::HTTP is Adam Wiggin's 'rest-client' library. It seems more targeted toward single requests (i.e. Restclient.get 'google.com') than mixing in and building a request class like HTTParty, though both libraries do variants of each style. It has a great interactive shell and request logging.</p>
287
+ <p><a href="http://github.com/archiloque/rest-client/" rel="nofollow">http://github.com/archiloque/rest-client/</a></p>
288
+ <p>I **highly** recommend another library authored by Mr. Wiggins that abstracts over the messy file system api, 'rush'. I'm really surprised that more libraries and apps that have a non-trivial amount of file system code don't use it.</p>
289
+ <p><a href="http://rush.heroku.com/" rel="nofollow">http://rush.heroku.com/</a></p>
290
+ <p>The code is very clean in both, I tip my hat to you Mr. Wiggins.</p>
291
+
292
+
293
+ </li> <li class="comment odd alt thread-odd thread-alt depth-1" id="comment-40556">
294
+ <img alt='' src='http://0.gravatar.com/avatar/e61f142f400df8299d37c2bce09e3478?s=64&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=G' class='avatar avatar-64 photo' height='64' width='64' /> <cite><a href='http://august.lilleaas.net/' rel='external nofollow' class='url'>August Lilleaas</a> says:</cite><br />
295
+
296
+ <small class="commentmetadata">January 19, 2010 at 10:19 am</small>
297
+
298
+
299
+ <p>I always use one of these libraries when I can (rest-client, httparty, ...). In some cases you'd be better off without dependencies, though, such as in small shell scripts, etc.</p>
300
+
301
+
302
+ </li> </ol>
303
+
304
+
305
+
306
+ </div>
307
+
308
+ <h3>Other Posts to Enjoy</h3>
309
+ <div class="widget_featured-posts noborder four">
310
+ <ul class="clearfix"><li>
311
+
312
+ <a href="http://www.rubyinside.com/mega-february-2012-ruby-news-5815.html"><img src="http://www.rubyinside.com/wp-content/plugins/wp-featured-post-with-thumbnail/scripts/timthumb.php?src=http://www.rubyinside.com/wp-content/uploads/2012/03/mega.png&amp;h=73&amp;w=73&amp;zc=1" class="alignleft" alt="The Mega Ruby News and Release Roundup for February 2012" /></a>
313
+ <h4 class="featured-title"><a href="http://www.rubyinside.com/mega-february-2012-ruby-news-5815.html">The Mega Ruby News and Release Roundup for February 2012</a></h4>
314
+ </li>
315
+ <li>
316
+
317
+ <a href="http://www.rubyinside.com/sinatra-book-review-5704.html"><img src="http://www.rubyinside.com/wp-content/plugins/wp-featured-post-with-thumbnail/scripts/timthumb.php?src=http://www.rubyinside.com/wp-content/uploads/2011/12/sinatra-up.jpeg&amp;h=73&amp;w=73&amp;zc=1" class="alignleft" alt="A Lagom Review of O&#8217;Reilly&#8217;s &#8216;Sinatra Up and Running&#8217;" /></a>
318
+ <h4 class="featured-title"><a href="http://www.rubyinside.com/sinatra-book-review-5704.html">A Lagom Review of O&#8217;Reilly&#8217;s &#8216;Sinatra Up and Running&#8217;</a></h4>
319
+ </li>
320
+ <li>
321
+
322
+ <a href="http://www.rubyinside.com/rubys-unary-operators-and-how-to-redefine-their-functionality-5610.html"><img src="http://www.rubyinside.com/wp-content/plugins/wp-featured-post-with-thumbnail/scripts/timthumb.php?src=http://www.rubyinside.com/wp-content/uploads/2011/11/unary.gif&amp;h=73&amp;w=73&amp;zc=1" class="alignleft" alt="Ruby&#8217;s Unary Operators and How to Define Their Functionality" /></a>
323
+ <h4 class="featured-title"><a href="http://www.rubyinside.com/rubys-unary-operators-and-how-to-redefine-their-functionality-5610.html">Ruby&#8217;s Unary Operators and How to Define Their Functionality</a></h4>
324
+ </li>
325
+ <li>
326
+
327
+ <a href="http://www.rubyinside.com/the-ruby-standard-library-to-be-converted-to-gems-for-ruby-2-0-5586.html"><img src="http://www.rubyinside.com/wp-content/plugins/wp-featured-post-with-thumbnail/scripts/timthumb.php?src=http://www.rubyinside.com/wp-content/uploads/2011/11/stdlib-gem.gif&amp;h=73&amp;w=73&amp;zc=1" class="alignleft" alt="The Ruby Standard Library To Be Converted to Gems for Ruby 2.0?" /></a>
328
+ <h4 class="featured-title"><a href="http://www.rubyinside.com/the-ruby-standard-library-to-be-converted-to-gems-for-ruby-2-0-5586.html">The Ruby Standard Library To Be Converted to Gems for Ruby 2.0?</a></h4>
329
+ </li>
330
+ </ul> </div>
331
+
332
+
333
+
334
+
335
+
336
+ <h3>Twitter Mentions</h3>
337
+ <div id="boastful"></div>
338
+
339
+ <div class="previousnext">
340
+ <div class="next"><a href="http://www.rubyinside.com/rubys-unary-operators-and-how-to-redefine-their-functionality-5610.html" rel="next">Next Post &raquo;</a></div>
341
+ <div class="previous"><a href="http://www.rubyinside.com/this-weeks-ruby-news-ruby-1-9-3p0-omniauth-1-0-maglev-1-0-and-more-5580.html" rel="prev">&laquo; Previous Post</a></div>
342
+ </div>
343
+
344
+ <!-- <h3>Want to get up to speed with Ruby 1.9?</h3>
345
+
346
+ <p><a href="http://www.rubyinside.com/19walkthrough/"><img src="http://www.rubyinside.com/images/19pro.gif" /></a> </p>
347
+ -->
348
+
349
+
350
+ </div>
351
+
352
+ </div>
353
+
354
+ </div> <!-- inner -->
355
+
356
+
357
+
358
+
359
+ </div> <!-- container -->
360
+
361
+
362
+ <div id="footer">
363
+ <div class="inner">
364
+ <p>Copyright &copy; 2006&ndash;2012 <a href="http://twitter.com/peterc">Peter Cooper</a></p>
365
+ </div>
366
+ </div>
367
+
368
+ <script type="text/javascript" src="http://engine.rubyrow.net/z/1313/adzerk1_4_16_19,adzerk2_4_16_19,adzerk3_4_16_19,adzerk4_4_16_19,adzerk5_4_16_19,adzerk6_4_16_19,adzerk7_4_16_19,adzerk8_4_16_19"></script>
369
+ <script type="text/javascript" src="http://www.rubyinside.com/wp-content/themes/ri2011/jquery.boastful.js"></script>
370
+
371
+ <script type="text/javascript">
372
+ $(document).ready(function() {
373
+ $('#boastful').boastful();
374
+ });
375
+ </script>
376
+
377
+ <script type="text/javascript">
378
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
379
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
380
+ </script>
381
+ <script type="text/javascript">
382
+ var pageTracker = _gat._getTracker("UA-2237791-3");
383
+ pageTracker._initData();
384
+ pageTracker._trackPageview();
385
+ </script>
386
+
387
+
388
+ </body>
389
+ </html>
390
+
391
+ <!-- div style="float:right"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.rubyinside.com/the-ruby-standard-library-to-be-converted-to-gems-for-ruby-2-0-5586.html" data-counturl="http://www.rubyinside.com/the-ruby-standard-library-to-be-converted-to-gems-for-ruby-2-0-5586.html" data-text="The Ruby Standard Library To Be Converted to Gems for Ruby 2.0?" data-count="horizontal">Tweet</a></div -->
392
+ <!-- div style="margin-bottom: -12px; margin-top: -10px"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.rubyinside.com%2Fthe-ruby-standard-library-to-be-converted-to-gems-for-ruby-2-0-5586.html&amp;layout=standard&amp;show_faces=false&amp;width=420&amp;action=like&amp;colorscheme=light&amp;height=26" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:420px; height:26px;" allowTransparency="true"></iframe></div -->
393
+ <!-- div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like href="http://x.com/" show_faces="false" width="450"></fb:like></div -->
394
+
395
+
396
+
397
+ <!-- Dynamic page generated in 0.238 seconds. -->
398
+ <!-- Cached page generated by WP-Super-Cache on 2012-05-22 13:47:57 -->
399
+ <!-- super cache -->
@@ -68,12 +68,10 @@ module Treat::Entities
68
68
  class Sentence < Phrase; end
69
69
 
70
70
  # Represents a terminal element in the text structure.
71
- class Token < Entity
72
- end
71
+ class Token < Entity; end
73
72
 
74
73
  # Represents a word.
75
- class Word < Token
76
- end
74
+ class Word < Token; end
77
75
 
78
76
  # Represents a clitic ('s).
79
77
  class Enclitic < Token; end
@@ -58,7 +58,7 @@ module Treat::Entities
58
58
  end
59
59
 
60
60
  # A bottom-up ordering of general types of entities.
61
- @@order = [Token, Phrase, Zone, Document, Collection]
61
+ @@order = [Token, Phrase, Zone, Section, Document, Collection]
62
62
 
63
63
  # Return the hierarchy level of the entity
64
64
  # class, the minimum being a Token and the
@@ -20,7 +20,7 @@ module Treat::Extractors
20
20
  module Topics
21
21
  extend Treat::Groupable
22
22
  self.type = :annotator
23
- self.targets = [:document]
23
+ self.targets = [:document, :section, :zone]
24
24
  end
25
25
 
26
26
  # Extract the keywords from a text.
@@ -12,7 +12,7 @@ class Treat::Languages::German
12
12
  Processors = {
13
13
  :chunkers => [:txt],
14
14
  :parsers => [:stanford],
15
- :segmenters => [:punkt],
15
+ :segmenters => [:tactful],
16
16
  :tokenizers => [:tactful]
17
17
  }
18
18
  Retrievers = {}
@@ -8,7 +8,7 @@ class Treat::Languages::Polish
8
8
  Lexicalizers = {}
9
9
  Processors = {
10
10
  :chunkers => [:txt],
11
- :segmenters => [:punkt],
11
+ :segmenters => [:tactful],
12
12
  :tokenizers => [:tactful]
13
13
  }
14
14
  Retrievers = {}
@@ -8,7 +8,7 @@ class Treat::Languages::Portuguese
8
8
  Lexicalizers = {}
9
9
  Processors = {
10
10
  :chunkers => [:txt],
11
- :segmenters => [:punkt],
11
+ :segmenters => [:tactful],
12
12
  :tokenizers => [:tactful]
13
13
  }
14
14
  Retrievers = {}
@@ -8,7 +8,7 @@ class Treat::Languages::Spanish
8
8
  Lexicalizers = {}
9
9
  Processors = {
10
10
  :chunkers => [:txt],
11
- :segmenters => [:punkt],
11
+ :segmenters => [:tactful],
12
12
  :tokenizers => [:tactful]
13
13
  }
14
14
  Retrievers = {}
data/lib/treat.rb CHANGED
@@ -10,7 +10,7 @@ module Treat
10
10
  end
11
11
 
12
12
  # The current version of Treat.
13
- VERSION = "1.0.5"
13
+ VERSION = "1.0.6"
14
14
 
15
15
  # Add methods to handle syntactic sugar,
16
16
  # language configuration options, and paths.
data/spec/sandbox.rb CHANGED
@@ -0,0 +1,17 @@
1
+ #encoding: utf-8
2
+ require_relative '../lib/treat'
3
+
4
+ =begin
5
+
6
+ text = Paragraph "Mississauga, Ontario, Canada - Unfortunately, the Radioshack is closing."
7
+ text.do :segment, :tokenize, :topics
8
+
9
+ text.print_tree
10
+
11
+ abort
12
+ text = "Bonjour, je suis bel et bien arrivé au château.".parse
13
+ text.do :category
14
+
15
+ text.print_tree
16
+
17
+ =end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: treat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-17 00:00:00.000000000 Z
12
+ date: 2012-05-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubyzip
@@ -220,7 +220,10 @@ files:
220
220
  - spec/word.rb
221
221
  - spec/zone.rb
222
222
  - tmp/INFO
223
+ - files/guides.rubyonrails.org/3_2_release_notes.html
223
224
  - files/INFO
225
+ - files/www.economist.com/21552208
226
+ - files/www.rubyinside.com/nethttp-cheat-sheet-2940.html
224
227
  - README.md
225
228
  - LICENSE
226
229
  homepage: https://github.com/louismullie/treat