给Httparty这个gem写的一个hack补丁

本文介绍了一个针对Ruby库Httparty的小巧补丁,该补丁能够让Httparty返回完整的HTTP响应,包括头部信息。这对于需要获取状态码、cookie等信息的场景非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[url=http://httparty.rubyforge.org/]Httparty[/url]是一个很好用的基于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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值