ruby中的NET::HTTP;這里暫時先列出幾個固定用法:
其中一,二不支持請求頭設置(header取ruby默認值),只能用於基本的請求,不支持持久連接,如果您執行許多HTTP請求,則不推薦它們;三,四可以設置請求頭;
NET::HTTP不能處理重定向和404 ;不支持會話保持
一. 基本GET請求get_response
require 'net/http' # 基本GET請求 require 'net/http' uri = URI('http://httpbin.org/get') response = Net::HTTP.get_response(uri) puts response.body # 帶參數的GET請求 require 'net/http' uri = URI('http://httpbin.org/get?name=zhaofan&age=23') response = Net::HTTP.get_response(uri) puts response.body # 如果我們想要在URL查詢字符串傳遞數據,通常我們會通過httpbin.org/get?key=val方式傳遞 # URI模塊允許使用 encode_www_form 方法,將一個HASH來進行轉化,例子如下: require 'net/http' uri = URI('http://httpbin.org/get?') data = {name:'zhaofan', age:23} uri.query = URI.encode_www_form(data) response = Net::HTTP.get_response(uri) puts response.body
二.基本post請求post_form(header默認為application/x-www-form-urlencoded)
require 'net/http' # 基本POST請求 # 通過在發送post請求時添加一個params參數,這個params參數可以通過字典構造成; # 該方法底層和get_response一樣都是調用了response方法 uri = URI('http://httpbin.org/post') params = {name:'zhaofan', age:23} res = Net::HTTP.post_form(uri, params) puts res.body
三.get固定用法
require 'net/http' url = URI('http://httpbin.org/get?') # 設置請求參數 params = {'name':'test'} url.query = URI.encode_www_form(params) http = Net::HTTP.new(url.host, url.port) # 設置請求頭 header = {'user-agent':'Chrome/61.0.3163.100'} response = http.get(url, header) puts response.body
四.post固定用法
- application/json
require 'net/http' require 'json' #application/json url = URI('http://httpbin.org/post') http = Net::HTTP.new(url.host, url.port) # 設置請求參數 data = {'code':1, 'sex':'男', 'id':1900, 'name': 'test'}.to_json # 設置請求頭 header = {'content-type':'application/json'} response = http.post(url, data, header) puts response.body
- application/x-www-form-urlencoded
require 'net/http' require 'json' #application/x-www-form-urlencoded url = URI('http://httpbin.org/post') http = Net::HTTP.new(url.host, url.port) #encodeURI參數 data = URI.encode_www_form({'name':'test'}) #設置請求頭 header = {'content-type':'application/x-www-form-urlencoded'} response = http.post(url, data,header) puts response.body
- multipart/form-data 上傳文件
# multipart/form-data url = URI('http://httpbin.org/post') http = Net::HTTP.new(url.host, url.port) # 設置請求參數 data = [ ['name', 'test'], ['image', open('test.jpg'), { filename: 'test.jpg'}] ] request = Net::HTTP::Post.new(url.path) request.set_form(data, 'multipart/form-data') response = http.request(request) puts response.body
五.response響應內容
require 'net/http' uri = URI('http://www.baidu.com') response = Net::HTTP.get_response(uri) puts "http版本:#{response.http_version}" #=> 1.1 puts "響應代碼: #{response.code}" #=> 200 puts "響應信息:#{response.message}" #=> ok puts "uri:#{response.uri}" #=> http://www.baidu.com puts "解碼信息:#{response.decode_content}" #=> true puts response.body #=> 響應體 response.header.each do |k,v| puts "#{k}:#{v}" end #=> 響應頭
六.發送https請求
require 'net/https' # 設置https http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE
