资源说明:this is a small, lightweight, powerful HttpRequest class based on the 'net/http' and 'net/ftp' libraries
== Introduction The HttpRequest class is based on the 'net/http' and 'net/ftp' libraries, so the return type is Net::HTTPResponse or Net::FTP when you call get or post or other methods by HttpRequest.xxx or HttpRequest.ftp == Options you can call like HttpRequest.get(options), the options parameter is a hash, support following keys: :url => String, the url you want to request :parameters => String or Hash, parameters will send to the url :redirect => Boolean, whether support redirect to, default is true :redirect_limits => Fixnum, maximal times for redirect if enabled :ssl_port => Fixnum, ssl port, default is 443 :headers => Hash, you can add some custom http headers :files => for upload files :ajax or :xhr => send request looks like AJAX calling (since 1.0.5) # proxy settings :proxy_addr => String, proxy address :proxy_port => Fixnum, proxy port :proxy_user => String, proxy username :proxy_pass => String, proxy password == Examples for your ruby program: include http_request.rb first require '/path/to/http_request.rb' or install it `gem install http_request.rb`, then `require 'http_request'` get puts HttpRequest.get('http://github.com').body puts HttpRequest.get('https://github.com').body get with query string, 4 are same puts HttpRequest.get('http://www.google.com/search?hl=en&q=ruby&start=0&sa=N').body puts HttpRequest.get('http://www.google.com/search', :parameters => 'hl=en&q=ruby&start=0&sa=N').body puts HttpRequest.get(:url => 'http://www.google.com/search', :parameters => 'hl=en&q=ruby&start=0&sa=N').body puts HttpRequest.get({:url => 'http://www.google.com/search', :parameters => 'hl=en&q=ruby&start=0&sa=N'}).body puts HttpRequest.get({:url => 'http://www.google.com/search', :parameters => {:hl => 'en', :q => 'ruby', :start => 0, :sa => 'N'}}).body post with some parameters puts HttpRequest.get('http://localhost/test.php', :parameters => 'from=http_request.rb').body puts HttpRequest.get(:url => 'http://localhost/test.php', :parameters => {:name => 'Ruby', :time => 'Now'}).body also support other http methods, such as put, delete, trace, options, move etc. HttpRequest.put(:url => 'http://www.example.com', :parameters => 'some=vars') HttpRequest.delete('http://www.example.com/article/1') HttpRequest.trace('http://www.example.com/') basic authorization HttpRequest.get('http://admin:pass@auth.cnzxh.net/secret/get/file') proxy support HttpRequest.get(:url => 'http://www.example.com/', :proxy_addr => 'your.proxy.address', :proxy_port => 80) HttpRequest.get(:url => 'http://www.example.com/', :proxy_addr => 'your.proxy.address', :proxy_port => 80, :proxy_user => 'admin', :proxy_pass => '123123') fetch headers HttpRequest.get('http://www.example.com/').each {|k, v| print "#{k} : #{v}" } fetch cookies hr = HttpRequest.get('http://www.yahoo.com') hr.cookies.each {|k, v| puts "#{k} => #{v}" } add cookies into header HttpRequest.get(:url => 'http://www.example.com/', :cookies => {:login => 'Yes', :userid => 101}) HttpRequest.get(:url => 'http://www.example.com/', :cookies => 'login=Yes; userId=101') fetch cookies and add cookies hr = HttpRequest.get('http://www.example.com/homepage') hr = HttpRequest.post('http://www.example.com/login', :cookies => hr.cookies) hr = HttpRequest.get('http://www.example.com/logout', :cookies => hr.cookies) store cookies with cookie jar (since v1.1.13) # default :cookie_jar is "default" hr1 = HttpRequest.post('http://hostname/request-cookies', :cookie_jar => 'user1') hr2 = HttpRequest.post('http://hostname/request-cookies', :cookie_jar => 'user2') hr1 = HttpRequest.post('http://hostname/send-cookies', :cookie_jar => 'user1', :cookies => hr1.cookies) hr2 = HttpRequest.post('http://hostname/send-cookies', :cookie_jar => 'user2', :cookies => hr2.cookies) upload file by post method HttpRequest.post( :url => 'http://localhost/upload.php', :files => { :file_name => 'test.txt', # original file name, default is rand name such as 0cdex_0 :field_name => 'user_file', # input field name, default is "files[]" :content_type => 'text/plain', # content type, default is application/octet-stream :file_content => 'Have a nice day!' # file content } ) upload more than 1 file files = [ {:file_name => 'a.txt', :file_content => 'just for test'}, {:file_name => 'b.csv', :file_content => "a,b,c\nd,e,f"} ] HttpRequest.post( :url => 'http://localhost/upload.php', :files => files ) upload files with parameters HttpRequest.post( :url => 'http://localhost/upload.php', :parameters => {:name => 'zhou', :age => '?'}, :files => [{:file_content => 'so easy:-)'}] ) HttpRequest.post( :url => 'http://localhost/upload.php', :parameters => 'target=php&client=ruby', :files => [{:file_content => 'so easy:-)'}] ) want to upload a binary file such as photo? HttpRequest.post( :url => 'http://localhost/upload.php', :parameters => {:title => 'Nice photo', :description => 'some description here.'}, :files => [{:file_name => 'nice.jpg', :field_name => 'photo', :file_content => File.read('/path/to/nice.jpg')}] ) upload file by put method, more can check http://www.php.net/manual/en/features.file-upload.put-method.php HttpRequest.put( :url => 'http://localhost/upload.php', :parameters => 'file content here' ) == Examples in command line: You need to do like "chmod +x http_request.rb" first. Usage: ./http_request.rb method url [parameters] get a file and print the content $./http_request.rb get http://feeds.feedburner.com/RidingRails $./http_request.rb get 'http://www.google.com/search?hl=en&q=ruby&start=0&sa=N' get but just print header $./http_request.rb get_only_header http://feeds.feedburner.com/RidingRails get header and content $./http_request.rb get_with_header http://feeds.feedburner.com/RidingRails download and save as a file $./http_request.rb http://rubyforge.org/frs/download.php/51094/RMagick-2.9.1.tar.bz2 > rmagick.tar.bz2 post $./http_request.rb post http://localhost/test.php 'name=Ruby&time=Now' such as "get_only_header" and "get_with_header", post and other http methods also can do such as "post_only_header", "put_with_header" etc. == Examples for FTP (since v1.0.1): download and save to ftp = HttpRequest.ftp(:get, :url => 'ftp://user:pass@my.domain.name/path/to/hello.mp3', :to => '/tmp/hello.mp3') # get as string (since v1.0.2) puts HttpRequest.ftp(:get_as_string, 'ftp://user:pass@localhost/path/to/file.txt') upload from local ftp = HttpRequest.ftp(:put, :url => 'ftp://user:pass@my.domain.name/path/to/hello.mp3', :from => '/tmp/hello.mp3') get server info puts HttpRequest.ftp(:status, :url => 'ftp://user:pass@my.domain.name/') create a new directory (only for last directory) HttpRequest.ftp(:mkdir, :url => 'ftp://user:pass@my.domain.name/path/to/newdir') HttpRequest.ftp(:mkdir, :url => 'ftp://user:pass@my.domain.name/newdir') remove a directory (only for last directory) HttpRequest.ftp(:mkdir, :url => 'ftp://user:pass@my.domain.name/path/to/willbe_removed_dir') list files puts HttpRequest.ftp(:list, :url => 'ftp://user:pass@my.domain.name/') list files as array HttpRequest.ftp(:nlst, :url => 'ftp://my.domain.name/', :username => 'user', :password => 'pass').each {|f| puts f } anonymous login puts HttpRequest.ftp(:status, :url => 'ftp://my.domain.name/') working as the "net/ftp" style, need set :close to false ftp = HttpRequest.ftp(:status, :url => 'ftp://user:pass@my.domain.name/', :close => false) puts ftp.response # get status from the ftp server ftp.chdir('/musics') ftp.getbinaryfile('test.ogg', '/tmp/test.ogg') ftp.close download multiple files from a directory ftp = HttpRequest.ftp('nlst', :url => 'ftp://user:pass@my.domain.name/mp3/', :close => false) ftp.response.each {|f| puts "downloading....#{f}" ftp.get(f, '/tmp/downloads/' + File.basename(f)) } ftp.close == Proc.call style (since v1.0.2) HttpRequest.get('http://www.example.com/') {|http| puts http.body http.each_header {|k, v| puts "#{k} => #{v}" } http.cookies.each {|k, v| puts "#{k} => #{v}" } } HttpRequest.ftp(:get, {"ftp://user:pass@localhost/soft.zip", :to => '/path/to/soft.zip'}) {|ftp| puts ftp.ls ftp.chdir('soft') ftp.getbinaryfile('ruby.exe', '/path/to/local/ruby.exe'); } == check the http status (since v1.0.3) HttpRequest.get('http://www.example.com/it_doesnot_exists.page').code_4xx? # true HttpRequest.get('http://www.example.com/it_doesnot_exists.page').code_404? # true HttpRequest.get('http://www.rubyonrails.com/').code_404? # false HttpRequest.head('http://www.rubyonrails.com/').code_2xx? # true HttpRequest.head('http://www.ruby-lang.org/').code_200? # true supported methods: code_1xx? code_2xx? code_3xx? code_4xx? code_5xx? code_101? code_200? ... or status_1xx? statux_2xx? ... == check whether or not the remote site is available (since v1.0.3) # return true if can access to the website with socket connection even it is a 500 or 404 page, otherwise, return false HttpRequest.available?('http://www.github.com/') == send XML data via the post method (since v1.0.4) xml = '' HttpRequest.post(:url => 'http://localhost/xml.php', :parameters = xml) == More examples please check the test directory == TODO bug fixing, testing and testing... == LATEST VERSION 1.1.14 - item one
- item two
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。