Httparty是一个很好用的基于Ruby的net库的gem,自身非常小巧,用法很灵活。
但是他有个毛病,就是发送完http请求之后返回的是http小的html部分,而不是消息头,比如set-cookie,status code,location等。
为了满足需求,又要保持Httparty源代码和官方同步,下面写了这个补丁:
"httpartyHack.rb"
#
# To change this template, choose Tools | Templates
# and open the template in the editor.
module HttpartyHack
def self.included(base)
class << base
alias_method :_send_request,:send_request
include HackMethods
#private_class_method :send_request
private :send_request
end
end
end
module HackMethods
def self.included(base)
#p "HackMethods been #{base} included"
end
def send_request(method, path, options={}) #:nodoc:
raise ArgumentError, 'only get, post, put and delete methods are supported' unless %w[get post put delete].include?(method.to_s)
raise ArgumentError, ':headers must be a hash' if options[:headers] && !options[:headers].is_a?(Hash)
raise ArgumentError, ':basic_auth must be a hash' if options[:basic_auth] && !options[:basic_auth].is_a?(Hash)
uri= URI.parse("#{base_uri}#{path}")
existing_query = uri.query ? "#{uri.query}&" : ''
uri.query= if options[:query].blank?
existing_query + default_params.to_query
else
existing_query + (options[:query].is_a?(Hash) ? default_params.merge(options[:query]).to_query : options[:query])
end
klass = Net::HTTP.const_get method.to_s.downcase.capitalize
request = klass.new(uri.request_uri)
request.body= options[:body].is_a?(Hash) ? options[:body].to_query : options[:body] unless options[:body].blank?
basic_auth = options.delete(:basic_auth) || @auth
request.initialize_http_header headers.merge(options[:headers] || {})
# note to self: self, do not put basic auth above headers because it removes basic auth
request.basic_auth(basic_auth[:username], basic_auth[:password]) if basic_auth
response = http(uri).request(request)
class<<response
attr :header
end
response
end
end
使用Httparty的时候需要:
include Httparty
如果你需要这个补丁的话,请在include Httparty之后:
include HttpartyHack
此时通过Httparty的get或者post方法得到的便是完整的response,而且该response增加了一个header方法,可以通过header方法访问该response的头,类型为Hash。
分享到:
- 2008-11-14 18:55
- 浏览 1268
- 评论(0)
- 论坛回复 / 浏览 (0 / 1626)
- 查看更多
相关推荐
api_httparty:Projeto utilizando Ruby Gem HTTParty
redis-namespace, 这个 gem 添加了一个 Redis 的redis命名空间Redis::Namespace 为你的redis keyspace ( 。比如,具有共同开始的键)的名称空间子集提供了接口,并且需要 redis 。require 'redis-namespace'# =
创建一个简单的配置脚本。 此外,由于用于完整系统仿真的配置脚本与您要仿真的硬件紧密耦合,因此它们是特定于体系结构的。 x86,ARM,SPARC等将具有完全不同的完整系统配置脚本。在本章中,我们将重点介绍x86,...
这个gem自动记录每个查询的SQL EXPLAIN
thin.gem eventmachine.gem for windows
SECS/GEM/GEM300的测试模拟器,某公司流出版本,好用无BUG,功能支持好用,不想其他SECS Driver每次都要编辑交互指令。
开始一个项目的工作只需要一个简单的命令:bundle installBundler是一种有用的工具,它能使你更方便地跟踪某个应用程序所依赖的gem(以及这些gem的版本)。它通过安装应用程序的Gemfile中的所有gem来做到这一点。...
CPU 2006在Gem5中1
这是一个ruby版本的银联手机支付gem,调用即可完成支付获取tn值传给手机
GEM5教程–gem5开始之旅(一)一、建立GEM51、GEM5的环境要求2、获取GEM5源代码3、第一个GEM5的建立二、创建一个简单的配置脚本1、GEM5的配置文件2、创建一个配置文件3、运行GEM54、总结GEM5系列教程索引 GEM5模拟器...
语法第章第节;阅读研读text 第段,做阅读题,并复习前篇;今...糖阅读评论赞崔磊点评:智慧城市是与每个活息息相关的事情—《梦想加速度》第期回复赞回复回复回复
本软件专门用于gem系列血气分析仪(gem3000.gem3500,gem4000)用串口连接电脑传输测试结果,样本数据处理,并自定义打印分析报告单。
command:gem
gem5仿真器的介绍与说明,并且指导该如何运行gem5仿真器
secs -gem 规格书一份,不会写规格书的同学可以拿走
制作一个简单的gem。
版本为:rails-2.3.8.gem 可使用指令安装:gem install rails-2.3.8.gem
gem5学习基础完整版,介绍了gem5环境的安装,以及一些基本概念。 gem5仿真器是用于计算机系统体系结构研究的模块化平台,涵盖系统级体系结构以及处理器微体系结构。1、多个可互换的CPU型号。 gem5提供了四种基于...
PLC的SECS/GEM通讯白皮书 采取分布式结构设计。 单个服务器瘫痪,立即切换到新的其他服务器分担连接,实现无丢失服务 超高并发处理,单服务器可达上百的连接数量。 快速、稳定可靠,您的选择不会有错。 ...
SECS GEM Solution