SlideShare une entreprise Scribd logo
1  sur  46
Ruby  application based on http www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Who am I? www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   ,[object Object],[object Object],[object Object],[object Object],[object Object]
www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Http Server www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Oauth JSON XML Params Signature Web Service Restful Cloud Computing HTML XHTML
Http protocol www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   ,[object Object],[object Object],Client (Browser) RubyConfChina Server Get /session/new Return session/new page Post /session Login success, redirect to / Get / Return home page
Ruby API? Official? Community? www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Get data from third-party website www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   if  the  website  provides an api if the website provides an official/community ruby api use the ruby api else write the ruby api by your self end else write the ruby codes act as a http client (browser) end
What if fetch contacts from gmail? What if fetch timelines from twitter? What if fetch friends from facebook? What if fetch contacts from msn? What if fetch repositories from github? Lucky, there are ruby api to do theses! www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
What if fetch contacts from 163 mail? What if fetch weather from sina? What if fetch friends from kaixin001? What if fetch contacts from fetion? T here are no ruby api to do theses! www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Act as  a http client (browser) ,[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Sniffer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Wireshark ,[object Object],[object Object],[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Wireshark www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   filter http one http request TCP/IP HTTP HTTP Header/Body Raw Data and Printable text
Wireshark www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   one http response
HTTP Analyzer ,[object Object],[object Object],[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
HTTP Analyzer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   http request header http response header
HTTP Analyzer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   http response body
HTTP Analyzer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   http request timing
Get session/new www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Get /session/new HTTP/1.1 Host: rubyconfchina.org Connect: keep-alive User-Agent: Mozilla/5.0 AppleWebKit/553.4 Accept: text/html,application/xhtml+xml,text/html;q=0.9 Accept-Encoding: gzip,deflate Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Get session/new response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   HTTP/1.1 200 OK Server: nginx/0.5.32 Date: Sun, 20 Jun 2010 09:25:08 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private, max-age=0, must-revalidate Content-Encoding: gzip  <!DOCTYPE html PUBLIC …> <html> …
Post /session www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Post /session HTTP/1.1 Host: rubyconfchina.org Connect: keep-alive User-Agent: Mozilla/5.0 AppleWebKit/553.4 Referer: http://rubyconfchina.org/session/new Content-Length: 106 Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,text/html;q=0.9  authenticity_token=…&login=flyerhzm&password=… &commit=Log+in
Post /session response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   HTTP/1.1 302 Moved Temporarily Server: nginx/0.5.32 Date: Sun, 20 Jun 2010 09:25:31 GMT Content-Type: text/html; charset=utf-8 Connect: keep-alive Location: http://rubyconfchina.org/ Cache-Control: no-cache Set-Cookie: auth_token=; _euruko_session=BAh7CTo Content-Length: 91  <html><body>You are being  <a href=http://rubyconfchina.org/>redirected</a>. </body></html>
Get / www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Get / HTTP/1.1 Host: rubyconfchina.org Connect: keep-alive User-Agent: Mozilla/5.0 AppleWebKit/553.4 Accept: text/html,application/xhtml+xml,text/html;q=0.9 Accept-Encoding: gzip,deflate Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Cookie: auth_token=; _euruko_session=BAh7CTo
Http protocol www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   HTTP/1.1 200 OK Server: nginx/0.5.32 Date: Sun, 20 Jun 2010 09:25:08 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private, max-age=0, must-revalidate Content-Encoding: gzip  <!DOCTYPE html PUBLIC …> <html> …
Resend same packets by Ruby www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Resend same packets by Ruby ,[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   uri = URI.parse(&quot;http://rubyconfchina.org/session/new&quot;) http = Net::HTTP.new(uri.host, uri.port) headers = { &quot;User-Agent&quot; => &quot; Mozilla/5.0 AppleWebKit/553.4 &quot;, &quot;Accept&quot; => &quot;…&quot; } response = http.request_get(uri.request_uri, headers)  puts response.body =~ /Login/  # 1942
Resend same packets by Ruby ,[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   raise Exception, &quot;get response should success&quot; unless Net::HTTPSuccess === repsonse if response.body =~ %r(<input name=&quot;authenticity_token&quot; .*?value=&quot;(.*>)&quot; />)m authenticity_token = $1 end
Resend same packets by Ruby ,[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   uri = URI.parse(&quot;http://rubyconfchina.org/session&quot;) http = Net::HTTP.new(uri.host, uri.port) body = &quot;authenticity_token=#{authenticity_token}& login=flyerhzm&password=…&quot; headers = { &quot;User-Agent&quot; => &quot; Mozilla/5.0 AppleWebKit/553.4 &quot;, &quot;Accept&quot; => &quot;…&quot; } response = http.request_post(uri.request_uri, body, headers)
Resend same packets by Ruby ,[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   raise Exception, &quot;get response should be redirect&quot; unless Net::HTTPRedirection === repsonse cookie = response[&quot;Set-Cookie&quot;] cookie = parse_cookie(cookie) Location = response[&quot;Location&quot;]
Resend same packets by Ruby ,[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   uri = URI.parse(Location) http = Net::HTTP.new(uri.host, uri.port) headers = { &quot;User-Agent&quot; => &quot; Mozilla/5.0 AppleWebKit/553.4 &quot;, &quot;Accept&quot; => &quot;…&quot;, &quot;Cookie&quot; => cookie } response = http.request_get(uri.request_uri, headers)  raise Exception, &quot;get repsonse should success&quot; unless Net::HTTPSuccess === response puts response.body =~ /Login/  # nil
Facility www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Mechanize ,[object Object],[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Mechanize www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   a = Mechanize.new do |agent| agent.user_agent_alias = 'Linux Firefox' end a.get('http://rubyconfchina.org/session/new') do |page| puts page.body =~ /Login/  # 1942 home_page = page.form_with(:action => '/session') do |f| f.login = 'flyerhzm' f.password = '…' end.click_button puts home_page.body =~ /Login/  # nil end
Test www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Test ,[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Test request www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Client Server GET /ht/sd.aspx?i=1 HTTP/1.1 Host: 221.176.31.39 …   R fetion.com.cn SIP-C/4.0 F: 730020377 I: 1 Q: 1 R CN: 19D28D4978125CAA4F6E54277BA7D9EF CL: type=&quot;pc&quot; ,version=&quot;3.6.2020&quot; SIPP sid = 730020377 i = 0
Test request www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   @fetion.stubs(:sid).returns(730020377) @fetion.stubs(:i).returns(0) @fetion.stubs(:guid).returns(&quot;19D28D4978125CAA4F6E54277BA7D9EF&quot;) expected_sipc_message  =<<-EOF R fetion.com.cn SIP-C/4.0 F: 730020377 I: 1 Q: 1 R CN: 19D28D4978125CAA4F6E54277BA7D9EF CL: type=&quot;pc&quot; ,version=&quot;3.6.2020&quot; SIPP EOF expected_sipc_message.gsub!(&quot;&quot;, &quot;&quot;).chomp! SipcMessage.register_first(@fetion).should ==  expected_sipc_message   Copied from Sniffer tool
Test response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Client Server HTTP/1.1 200 OK Server: nginx/0.5.32 …  Set-Cookie:  ssic=CBIOAAAm+FiuQgpcnFi; path=/  <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <results status-code=&quot;200&quot;> <user uri=&quot;sip:730020377@fetion.com.cn;p=6907&quot; /> </results>
Fakeweb ,[object Object],[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Test response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   FakeWeb.register_uri( :get, 'https://uid.fetion.com.cn/ssiportal/SSIAppSignInV4.aspx? mobileno=15800681509&digest=79cd56b93f21298dc8ae9d26de1258e3d', :body => %Q|<?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?><results status-code=&quot;200&quot;><user uri=&quot;sip:730020377@fetion.com.cn;p=6907&quot; /></results>|,  :set_cookie => Q|ssic=CBIOAAAm+FiuQgpcnFi; path=/| ) @fetion.login @fetion.status_code.should == &quot;200&quot; @fetion.sid.should == &quot;730020377&quot; Copied from Sniffer tool
Test response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   FakeWeb.register_uri( :get,  'https://uid.fetion.com.cn/ssiportal/SSIAppSignInV4.aspx? mobileno=15800681509&digest=79cd56b93f21298dc8ae9d26de1258e3d',  :body => %Q|<?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?><results status-code=&quot;401&quot; desc=&quot;password error&quot; />|,  :status => ['401', 'password error'] ) lambda { @fetion.login }.should raise_exception(Fetion::PasswordError) Copied from Sniffer tool
Test Process ,[object Object],[object Object],[object Object],[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Performance www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
net-http-persistent ,[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   user system total real Net::HTTP 8.410000 2.400000 10.810000 ( 17.333671) Net::HTTP::Persistent 8,110000 0.880000 8.990000 ( 12.190094)
typhoeus ,[object Object],[object Object],[object Object],www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   user system total real Net::HTTP 0.030000 0.010000 0.040000 ( 10.054327) typhoeus 0.020000 0.070000 0.090000 (  0.508817)
Q&A Thank you www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

Contenu connexe

Tendances

Asynchronous I/O in NodeJS - new standard or challenges?
Asynchronous I/O in NodeJS - new standard or challenges?Asynchronous I/O in NodeJS - new standard or challenges?
Asynchronous I/O in NodeJS - new standard or challenges?
Dinh Pham
 
Ruby - a tester's best friend
Ruby - a tester's best friendRuby - a tester's best friend
Ruby - a tester's best friend
Peter Lind
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - Basic
Eddie Kao
 

Tendances (20)

Ruby on Rails for beginners
Ruby on Rails for beginnersRuby on Rails for beginners
Ruby on Rails for beginners
 
Ruby
RubyRuby
Ruby
 
Ruby Programming Language - Introduction
Ruby Programming Language - IntroductionRuby Programming Language - Introduction
Ruby Programming Language - Introduction
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
 
On Web Browsers
On Web BrowsersOn Web Browsers
On Web Browsers
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
RJB - another choice for Ruby and Java interoperability
RJB - another choice for Ruby and Java interoperabilityRJB - another choice for Ruby and Java interoperability
RJB - another choice for Ruby and Java interoperability
 
mod_php vs FastCGI vs FPM vs CLI
mod_php vs FastCGI vs FPM vs CLImod_php vs FastCGI vs FPM vs CLI
mod_php vs FastCGI vs FPM vs CLI
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developer
 
Introduction to rails
Introduction to railsIntroduction to rails
Introduction to rails
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
 
RubyMotion Introduction
RubyMotion IntroductionRubyMotion Introduction
RubyMotion Introduction
 
Asynchronous I/O in NodeJS - new standard or challenges?
Asynchronous I/O in NodeJS - new standard or challenges?Asynchronous I/O in NodeJS - new standard or challenges?
Asynchronous I/O in NodeJS - new standard or challenges?
 
Ruby Basics
Ruby BasicsRuby Basics
Ruby Basics
 
Rack Middleware
Rack MiddlewareRack Middleware
Rack Middleware
 
A bridge between php and ruby
A bridge between php and ruby A bridge between php and ruby
A bridge between php and ruby
 
MacRuby: What is it? and why should you care?
MacRuby: What is it? and why should you care?MacRuby: What is it? and why should you care?
MacRuby: What is it? and why should you care?
 
Ruby - a tester's best friend
Ruby - a tester's best friendRuby - a tester's best friend
Ruby - a tester's best friend
 
Jedi Mind Tricks for Git
Jedi Mind Tricks for GitJedi Mind Tricks for Git
Jedi Mind Tricks for Git
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - Basic
 

En vedette

Rails Request & Middlewares
Rails Request & MiddlewaresRails Request & Middlewares
Rails Request & Middlewares
Santosh Wadghule
 
Using puppet, foreman and git to develop and operate a large scale internet s...
Using puppet, foreman and git to develop and operate a large scale internet s...Using puppet, foreman and git to develop and operate a large scale internet s...
Using puppet, foreman and git to develop and operate a large scale internet s...
techblog
 
vSphere APIs for performance monitoring
vSphere APIs for performance monitoringvSphere APIs for performance monitoring
vSphere APIs for performance monitoring
Alan Renouf
 
Redis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesRedis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational Databases
Karel Minarik
 

En vedette (20)

Rails Request & Middlewares
Rails Request & MiddlewaresRails Request & Middlewares
Rails Request & Middlewares
 
Rails Request Response Lifecycle
Rails Request Response LifecycleRails Request Response Lifecycle
Rails Request Response Lifecycle
 
Request-Response Cycle of Ruby on Rails App
Request-Response Cycle of Ruby on Rails AppRequest-Response Cycle of Ruby on Rails App
Request-Response Cycle of Ruby on Rails App
 
Web : Request-Response Lifecycle (Ruby on Rails)
Web : Request-Response Lifecycle (Ruby on Rails)Web : Request-Response Lifecycle (Ruby on Rails)
Web : Request-Response Lifecycle (Ruby on Rails)
 
Using puppet, foreman and git to develop and operate a large scale internet s...
Using puppet, foreman and git to develop and operate a large scale internet s...Using puppet, foreman and git to develop and operate a large scale internet s...
Using puppet, foreman and git to develop and operate a large scale internet s...
 
Mapping, Interlinking and Exposing MusicBrainz as Linked Data
Mapping, Interlinking and Exposing MusicBrainz as Linked DataMapping, Interlinking and Exposing MusicBrainz as Linked Data
Mapping, Interlinking and Exposing MusicBrainz as Linked Data
 
React.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIsReact.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIs
 
Continuously-Integrated Puppet in a Dynamic Environment
Continuously-Integrated Puppet in a Dynamic EnvironmentContinuously-Integrated Puppet in a Dynamic Environment
Continuously-Integrated Puppet in a Dynamic Environment
 
JSON and the APInauts
JSON and the APInautsJSON and the APInauts
JSON and the APInauts
 
Better encryption & security with MariaDB 10.1 & MySQL 5.7
Better encryption & security with MariaDB 10.1 & MySQL 5.7Better encryption & security with MariaDB 10.1 & MySQL 5.7
Better encryption & security with MariaDB 10.1 & MySQL 5.7
 
Sensu
SensuSensu
Sensu
 
How We Do DevOps at Walmart: OneOps OSS Application Lifecycle Management Plat...
How We Do DevOps at Walmart: OneOps OSS Application Lifecycle Management Plat...How We Do DevOps at Walmart: OneOps OSS Application Lifecycle Management Plat...
How We Do DevOps at Walmart: OneOps OSS Application Lifecycle Management Plat...
 
vSphere APIs for performance monitoring
vSphere APIs for performance monitoringvSphere APIs for performance monitoring
vSphere APIs for performance monitoring
 
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
 
Make GUI Apps with Shoes
Make GUI Apps with ShoesMake GUI Apps with Shoes
Make GUI Apps with Shoes
 
PostgreSQL Materialized Views with Active Record
PostgreSQL Materialized Views with Active RecordPostgreSQL Materialized Views with Active Record
PostgreSQL Materialized Views with Active Record
 
The Complete MariaDB Server Tutorial - Percona Live 2015
The Complete MariaDB Server Tutorial - Percona Live 2015The Complete MariaDB Server Tutorial - Percona Live 2015
The Complete MariaDB Server Tutorial - Percona Live 2015
 
Redis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesRedis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational Databases
 
Taking Control of Chaos with Docker and Puppet
Taking Control of Chaos with Docker and PuppetTaking Control of Chaos with Docker and Puppet
Taking Control of Chaos with Docker and Puppet
 
Deployment with Ruby on Rails
Deployment with Ruby on RailsDeployment with Ruby on Rails
Deployment with Ruby on Rails
 

Similaire à Ruby application based on http

Contributing To Rails By Plugin Gem
Contributing To Rails By Plugin GemContributing To Rails By Plugin Gem
Contributing To Rails By Plugin Gem
Daniel Lv
 
Email Contacts For Invitation
Email Contacts For InvitationEmail Contacts For Invitation
Email Contacts For Invitation
Richard Huang
 
Vivendo No Mundo Rails
Vivendo No Mundo RailsVivendo No Mundo Rails
Vivendo No Mundo Rails
Alisson Sales
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
arif44
 
Profiling PHP & Javascript
Profiling PHP & JavascriptProfiling PHP & Javascript
Profiling PHP & Javascript
Dave Ross
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the rest
george.james
 

Similaire à Ruby application based on http (20)

Rails bestpractices.com
Rails bestpractices.comRails bestpractices.com
Rails bestpractices.com
 
Contributing To Rails By Plugin Gem
Contributing To Rails By Plugin GemContributing To Rails By Plugin Gem
Contributing To Rails By Plugin Gem
 
Email Contacts For Invitation
Email Contacts For InvitationEmail Contacts For Invitation
Email Contacts For Invitation
 
Design Pattern From Java To Ruby
Design Pattern    From Java To RubyDesign Pattern    From Java To Ruby
Design Pattern From Java To Ruby
 
Static Code Analysis For Ruby
Static Code Analysis For RubyStatic Code Analysis For Ruby
Static Code Analysis For Ruby
 
Vivendo No Mundo Rails
Vivendo No Mundo RailsVivendo No Mundo Rails
Vivendo No Mundo Rails
 
URL Design
URL DesignURL Design
URL Design
 
Ruby Conf Preso
Ruby Conf PresoRuby Conf Preso
Ruby Conf Preso
 
HTML5 for the Ruby Developer
HTML5 for the Ruby DeveloperHTML5 for the Ruby Developer
HTML5 for the Ruby Developer
 
Css sprite best practices
Css sprite best practicesCss sprite best practices
Css sprite best practices
 
unit1 part 1 sem4 php.docx
unit1 part 1 sem4 php.docxunit1 part 1 sem4 php.docx
unit1 part 1 sem4 php.docx
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
 
Profiling PHP & Javascript
Profiling PHP & JavascriptProfiling PHP & Javascript
Profiling PHP & Javascript
 
Web Services
Web ServicesWeb Services
Web Services
 
RESTful design
RESTful designRESTful design
RESTful design
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the rest
 
Introduction to Rails
Introduction to RailsIntroduction to Rails
Introduction to Rails
 
Rest
RestRest
Rest
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in Perl
 
The Case for HTTP/2 - EpicFEL Sept 2015
The Case for HTTP/2 - EpicFEL Sept 2015The Case for HTTP/2 - EpicFEL Sept 2015
The Case for HTTP/2 - EpicFEL Sept 2015
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Dernier (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

Ruby application based on http

  • 1. Ruby application based on http www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 2.
  • 3. www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 4. Http Server www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Oauth JSON XML Params Signature Web Service Restful Cloud Computing HTML XHTML
  • 5.
  • 6. Ruby API? Official? Community? www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 7. Get data from third-party website www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development if the website provides an api if the website provides an official/community ruby api use the ruby api else write the ruby api by your self end else write the ruby codes act as a http client (browser) end
  • 8. What if fetch contacts from gmail? What if fetch timelines from twitter? What if fetch friends from facebook? What if fetch contacts from msn? What if fetch repositories from github? Lucky, there are ruby api to do theses! www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 9. What if fetch contacts from 163 mail? What if fetch weather from sina? What if fetch friends from kaixin001? What if fetch contacts from fetion? T here are no ruby api to do theses! www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 10.
  • 11. Sniffer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 12.
  • 13. Wireshark www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development filter http one http request TCP/IP HTTP HTTP Header/Body Raw Data and Printable text
  • 14. Wireshark www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development one http response
  • 15.
  • 16. HTTP Analyzer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development http request header http response header
  • 17. HTTP Analyzer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development http response body
  • 18. HTTP Analyzer www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development http request timing
  • 19. Get session/new www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Get /session/new HTTP/1.1 Host: rubyconfchina.org Connect: keep-alive User-Agent: Mozilla/5.0 AppleWebKit/553.4 Accept: text/html,application/xhtml+xml,text/html;q=0.9 Accept-Encoding: gzip,deflate Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  • 20. Get session/new response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development HTTP/1.1 200 OK Server: nginx/0.5.32 Date: Sun, 20 Jun 2010 09:25:08 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private, max-age=0, must-revalidate Content-Encoding: gzip <!DOCTYPE html PUBLIC …> <html> …
  • 21. Post /session www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Post /session HTTP/1.1 Host: rubyconfchina.org Connect: keep-alive User-Agent: Mozilla/5.0 AppleWebKit/553.4 Referer: http://rubyconfchina.org/session/new Content-Length: 106 Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,text/html;q=0.9 authenticity_token=…&login=flyerhzm&password=… &commit=Log+in
  • 22. Post /session response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development HTTP/1.1 302 Moved Temporarily Server: nginx/0.5.32 Date: Sun, 20 Jun 2010 09:25:31 GMT Content-Type: text/html; charset=utf-8 Connect: keep-alive Location: http://rubyconfchina.org/ Cache-Control: no-cache Set-Cookie: auth_token=; _euruko_session=BAh7CTo Content-Length: 91 <html><body>You are being <a href=http://rubyconfchina.org/>redirected</a>. </body></html>
  • 23. Get / www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Get / HTTP/1.1 Host: rubyconfchina.org Connect: keep-alive User-Agent: Mozilla/5.0 AppleWebKit/553.4 Accept: text/html,application/xhtml+xml,text/html;q=0.9 Accept-Encoding: gzip,deflate Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Cookie: auth_token=; _euruko_session=BAh7CTo
  • 24. Http protocol www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development HTTP/1.1 200 OK Server: nginx/0.5.32 Date: Sun, 20 Jun 2010 09:25:08 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private, max-age=0, must-revalidate Content-Encoding: gzip <!DOCTYPE html PUBLIC …> <html> …
  • 25. Resend same packets by Ruby www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31. Facility www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 32.
  • 33. Mechanize www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development a = Mechanize.new do |agent| agent.user_agent_alias = 'Linux Firefox' end a.get('http://rubyconfchina.org/session/new') do |page| puts page.body =~ /Login/ # 1942 home_page = page.form_with(:action => '/session') do |f| f.login = 'flyerhzm' f.password = '…' end.click_button puts home_page.body =~ /Login/ # nil end
  • 34. Test www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 35.
  • 36. Test request www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Client Server GET /ht/sd.aspx?i=1 HTTP/1.1 Host: 221.176.31.39 … R fetion.com.cn SIP-C/4.0 F: 730020377 I: 1 Q: 1 R CN: 19D28D4978125CAA4F6E54277BA7D9EF CL: type=&quot;pc&quot; ,version=&quot;3.6.2020&quot; SIPP sid = 730020377 i = 0
  • 37. Test request www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development @fetion.stubs(:sid).returns(730020377) @fetion.stubs(:i).returns(0) @fetion.stubs(:guid).returns(&quot;19D28D4978125CAA4F6E54277BA7D9EF&quot;) expected_sipc_message =<<-EOF R fetion.com.cn SIP-C/4.0 F: 730020377 I: 1 Q: 1 R CN: 19D28D4978125CAA4F6E54277BA7D9EF CL: type=&quot;pc&quot; ,version=&quot;3.6.2020&quot; SIPP EOF expected_sipc_message.gsub!(&quot;&quot;, &quot;&quot;).chomp! SipcMessage.register_first(@fetion).should == expected_sipc_message Copied from Sniffer tool
  • 38. Test response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Client Server HTTP/1.1 200 OK Server: nginx/0.5.32 … Set-Cookie: ssic=CBIOAAAm+FiuQgpcnFi; path=/ <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <results status-code=&quot;200&quot;> <user uri=&quot;sip:730020377@fetion.com.cn;p=6907&quot; /> </results>
  • 39.
  • 40. Test response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development FakeWeb.register_uri( :get, 'https://uid.fetion.com.cn/ssiportal/SSIAppSignInV4.aspx? mobileno=15800681509&digest=79cd56b93f21298dc8ae9d26de1258e3d', :body => %Q|<?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?><results status-code=&quot;200&quot;><user uri=&quot;sip:730020377@fetion.com.cn;p=6907&quot; /></results>|, :set_cookie => Q|ssic=CBIOAAAm+FiuQgpcnFi; path=/| ) @fetion.login @fetion.status_code.should == &quot;200&quot; @fetion.sid.should == &quot;730020377&quot; Copied from Sniffer tool
  • 41. Test response www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development FakeWeb.register_uri( :get, 'https://uid.fetion.com.cn/ssiportal/SSIAppSignInV4.aspx? mobileno=15800681509&digest=79cd56b93f21298dc8ae9d26de1258e3d', :body => %Q|<?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?><results status-code=&quot;401&quot; desc=&quot;password error&quot; />|, :status => ['401', 'password error'] ) lambda { @fetion.login }.should raise_exception(Fetion::PasswordError) Copied from Sniffer tool
  • 42.
  • 43. Performance www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 44.
  • 45.
  • 46. Q&A Thank you www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development