来源:
    Phillip Toland发布了一个简单的Ruby HTTP Client- Patron。它基于libcurl,与Curb很类似,但是由于对Curb的API不太满意,于是便创造出了patron。

使用方法:
      使用patron,你可以实例化一个Session对象:
       sess = Patron::Session.new
       sess.base_url = "http://search.twitter.com/"
      然后调用方法,决定是使用:GET, HEAD, PUT, POST或DELETE操作,例如:

       response = sess.get "search.json?q=ruby"
      也可以发送自定义header:

       sess.post("/foo/stuff", "some data", {"Content-Type" => "text/plain"})
源码位置:     
安装方法:

          安装前必须安装最新的libcurl库。

     windows/linux : gem install patron
API文档:
介绍:
  patron实现了HTTP的下面几个方法[:get, :put, :post, :delete, :head, :copy]
       GET: 请求指定的页面信息,并返回实体主体。
       HEAD: 只请求页面的首部。
       POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
       PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
       DELETE: 请求服务器删除指定的页面。
       COPY: 请求服务器将指定的页面拷贝至另一个网络地址。

关于HEAD方法的一些记录:
       Head方法,它可以获取http头信息,其中的Content-Length就是文件的大小。在Http协议中,Head方法得到的响应和Get           方法相比,除了没有正文内容以外,其它都是一样的。也就是说:
          Get:http头信息 内容
          Head:http头信息
          这样如果我们只关心http头,而不需要内容时,就可以使用Head方法了。
 核心方法:
 def request(action, url, headers, options = {})
req = Request.new
req.action = action
req.timeout = self.timeout
req.connect_timeout = self.connect_timeout
req.max_redirects = self.max_redirects
req.headers = self.headers.merge(headers)
req.username = self.username
req.password = self.password
req.upload_data = options[:data]
req.file_name = options[:file]
req.proxy = proxy
req.auth_type = auth_type
req.insecure = insecure
req.url = self.base_url.to_s url.to_s
raise ArgumentError, "Empty URL" if req.url.empty?
handle_request(req)
end
def copy(url, dest, headers = {})
   headers['Destination'] = dest 
   request(:copy, url, headers) 
end
def delete(url, headers = {}) 
    request(:delete, url, headers) 
end
 def get(url, headers = {})
request(:get, url, headers
end         

def get(url, headers = {})
request(:get, url, headers
end  
def get(url, headers = {}) 
  request(:get, url, headers) 
end
def post(url, data, headers = {}) 
 request(:post, url, headers, :data => data) 
end 
def post_file(url, filename, headers = {}) 
 request(:post, url, headers, :file => filename) 
end 
def put(url, data, headers = {}) 
 request(:put, url, headers, :data => data) 
end 
 def put_file(url, filename, headers = {}) 
 request(:put, url, headers, :file => filename) 
end


09-04 07:31