使用ruby发起网络请求,需要用到'net/http',下面的程序是获得一个对url请求的
响应
其实最简单的方法是
>>require "open-uri"
>>open("http://www.cnblog.org/blog/atom.xml")
但是,这个方法的缺点是太简单,无法设置超时时间。在超时的情况下,他会无限的请求下去,直到达到了默认的超时时间,这个时间很长
>> open("http://www.cnblog.org/blog/atom.xml")
Errno::ETIMEDOUT: Connection timed out - connect(2)
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:560:in `initialize'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:560:in `open'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/local/bin/rubyee/lib/ruby/1.8/timeout.rb:53:in `timeout'
from /usr/local/bin/rubyee/lib/ruby/1.8/timeout.rb:93:in `timeout'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:553:in `do_start'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:542:in `start'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:242:in `open_http'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:616:in `buffer_open'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:162:in `catch'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:518:in `open'
from /usr/local/bin/rubyee/lib/ruby/1.8/open-uri.rb:30:in `open'
from (irb):6>>
为了保险起见,在要考虑超时处理或者其他设定的情况下,还是使用Net::HTTP
除了能设置超时时间之外,还能设置其他的请求参数,例如user-agent
这个user-agent还是很有用的参数,先前在拿163.com做实验的时候,没有设个参数,结果老是重定向,把这个请求当做了手机端的
class HandleGetRequest
# 对url发起get请求
require 'net/http'
def self.get_response(url)
begin
url_str = URI.parse(url)
site = Net::HTTP.new(url_str.host, url_str.port)
site.open_timeout = 20
site.read_timeout = 20
path = url_str.query.blank? ? url_str.path : url_str.path+"?"+url_str.query
return site.get2(path,{'accept'=>'text/html','user-agent'=>'Mozilla/5.0'})
rescue Exception => ex
p ex
end
end
end
请求一个正常的网址
>> HandleGetRequest.get_response("http://www.iteye.com/topic/431217")
=> #<Net::HTTPOK 200 OK readbody=true>
如果后面的path为空 注意斜杠
>> HandleGetRequest.get_response("http://www.google.com.hk")
#<ArgumentError: HTTP request path is empty>
=> nil
>> HandleGetRequest.get_response("http://www.google.com.hk/")
=> #<Net::HTTPOK 200 OK readbody=true>
请求一个超时的网址(在我机器上测试时超时的),会在设定的时间到达时抛出异常
>> HandleGetRequest.get_response("http://www.cnblog.org/blog/atom.xml")
#<Timeout::Error: execution expired>
Timeout::Error: execution expired
from /usr/local/bin/rubyee/lib/ruby/1.8/timeout.rb:60:in `open'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:553:in `do_start'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:542:in `start'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:1035:in `request'
from /usr/local/bin/rubyee/lib/ruby/1.8/net/http.rb:948:in `get2'
from /home/chengliwen/chengliwen/deploy/pin-macro-tmp/lib/handle_get_request.rb:30:in `get_response'
from (irb):1
然后可以根据响应值,去处理response的body了
分享到:
相关推荐
#如果有GET请求参数直接写在URI地址中 uri = 'http://uri' html_response = nil open(uri) do |http| html_response = http.read end puts html_response require open-uri #如果有GET请求参数直接写在URI地址中 uri...
#CloudPassage API示例版本: 1.0 作者:蒂姆·斯宾塞( Tim Spencer ) 这些ruby和Python脚本包括一些示例,这些示例出于基本目的调用CloudPassage API,例如身份验证,提交GET请求以检索信息以及提交PUT请求以将...
Unirest 是一个轻量级的 HTTP 请求库,涵盖 Node、Ruby、Java、PHP、Python、Objective-C、.NET 等多种语言。可发起 GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS 请求
练习使用Ruby发送GET请求 构建可重用的类,用于发送请求和处理响应 介绍 现在该练习构建自己的类以检索远程数据了。 在本实验中,您需要构建通用的GetRequester类。 此类将能够在初始化时接收URL并在命令上发送...
发出GET , POST , PUT , PATCH , DELETE请求 同步和异步(非阻塞)请求 支持表单参数,文件上传和自定义主体实体 支持gzip 本地支持基本身份验证 可自定义的超时 每个请求的可自定义默认标头(DRY) 自动将...
Pully 是一个用于管理 GitHub 拉取请求的 ruby 库; 专为我们在持续集成和部署基础设施而。 卖点 很容易使用 它对涉及 GitHub 的 API 的测试有完整的代码覆盖 虽然它使用 GitHub 上的拉取请求接口,但它不使用...
lite是一个用ruby编写的MVC Web框架和orm。 该框架的最初尝试是将我们在App Academy教授的两个项目Rails Lite和Active Record Lite的最终结果结合在一起。 将两者结合成一个有凝聚力的框架是一个充满启发的过程,...
到目前为止,我们一直在进行GET请求,因为我们只是在请求数据。 但是一旦我们开始更改服务器上的数据,我们就进入了POST领域。 根据文档,我们将需要使用一个venueId ,一些text以及由于需要代理用户而将POST提交到...
激子 可用,快速,简单的Ruby HTTP 1.1 ... 支持的一次性请求方法是connect , delete , get , head , options , post , put和trace 。 请求返回一个具有body , headers , remote_ip和status属性的响应对象
这是一个GET请求的示例: require "requests" response = Requests . request ( "GET" , "http://example.com" ) # Now you have these methods available response . status #=> Number with the status code ...
Ruby 模式 API 客户端 使用 Schema 构建和扩展电子商务。 在创建一个免费帐户 例子 require 'schema' client = Schema :: Client . new ( { "id" : "<clientid>" , "key" : "<clientkey>" ) ) products = client ...
Unirest是一个轻量级的HTTP请求库,涵盖Node、Ruby、Java、PHP、Python、Objective-C、.NET等多种语言。可发起GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS请求。 特性 1.能够伪造GET, POST, PUT, PATCH, DELETE,...
会话必须包含在每个请求的标头中。 获取当前用户的所有待办事项: GET 'http://host/todos/all' 响应 JSON 数据示例: [{ " id " : 1 , " task " : " Task Title 01 " , " completed " : true },{ " id
Unirest 是一个轻量级的 HTTP 请求库,可发起 GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS 请求。支持 Node、Ruby、Java、PHP、Python、Objective-C、.NET 等多种语言。底层是基于httpclient,所以使用Unirest...
支持的 Ruby 版本MRI >= 2.0.0安装 gem install ionian问题、错误、功能请求任何错误和功能请求都应在 GitHub 问题跟踪器上报告: 拉取请求首选通过 GitHub。 Mercurial 用户可以使用与 GitHub 存储库进行交互。代码...
早期阶段,但功能正常:) ##安装: 首先在 Ubuntu 上安装sudo apt-get install ruby ruby-dev build-essential nodejs 然后gem install nRF-ruby ##联系: 无线电模块连接如下(CE和CS可以左右移动,其他固定)...
支持对GetUpdated API的支持支持Blob数据类型。 支持GZIP压缩。 支持。 支持相关的选择列表。 支持解码签名的请求。 (新的!) | |安装将此行添加到您的应用程序的Gemfile中: gem 'restforce', '~> 5.0.5'然后...
GET请求 Nestful.get 'http://example.com' #=> "body" POST请求 # url-encoded form POST Nestful.post 'http://example.com', :foo => 'bar' # JSON POST Nestful.post 'http://example.com', {:foo => 'bar'}, :...
Pinterest 这是用于与官方进行交互的Ruby宝石。 该gem使用Faraday和Hashie发出请求并解析响应。 经过测试,可帮助商人销售更多商品。用法从Pinterest获取访问令牌。 您可以生成一个。 $ gem install pinterest-api ...