一,二不支持请求头设置(header取ruby默认值),只能用于基本的请求,不支持持久连接,如果您执行许多HTTP请求,则不推荐它们; 三,四可以设置请求头; NET::HTTP不能处理重定向和404 ;不支持会话保持
一、 基本GET请求
require 'net/http'
uri = URI ( 'http://httpbin.org/get' )
res = Net:: HTTP . get_response( uri)
res. code => '200'
res. body => body string
JSON . parse( res. body)
uri = URI ( 'http://httpbin.org/get?name=zhaofan&age=23' )
res = Net:: HTTP . get_response( uri)
res. body
uri = URI ( 'http://httpbin.org/get?' )
data = { name : 'zhaofan' , age : 23 }
uri. query = URI . encode_www_form( data)
res = Net:: HTTP . get_response( uri)
res. body
二.基本post请求post_form(header默认为application/x-www-form-urlencoded)
uri = URI ( 'http://httpbin.org/post' )
params = { name : 'zhaofan' , age : 23 }
res = Net:: HTTP . post_form( uri, params)
res. body
三.get固定用法
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' }
res = http. get( url, header)
res. body
四.post固定用法
url = URI ( 'http://httpbin.org/post' )
http = Net:: HTTP . new ( url. host, url. port)
params = { 'code' : 1 , 'sex' : '男' , 'id' : 1900 , 'name' : 'test' } . to_json
header = { 'content-type' : 'application/json' }
res = http. post( url, params, header)
res. body
application/x-www-form-urlencoded
url = URI ( 'http://httpbin.org/post' )
http = Net:: HTTP . new ( url. host, url. port)
params = URI . encode_www_form( { 'name' : 'test' } )
header = { 'content-type' : 'application/x-www-form-urlencoded' }
res = http. post( url, params, header)
res. body
url = URI ( 'http://httpbin.org/post' )
http = Net:: HTTP . new ( url. host, url. port)
params = [
[ 'name' , 'test' ] ,
[ 'image' , open( 'test.jpg' ) , { filename : 'test.jpg' } ]
]
request = Net:: HTTP :: Post . new ( url. path)
request. set_form( params, 'multipart/form-data' )
res = http. request( request)
puts res. body
PUT用法
url = URI . parse( @url )
request = Net:: HTTP :: Put . new ( url, 'Content-Type' => content_type)
request. body = data
response = Net:: HTTP . start( url. host, url. port, :use_ssl => url. scheme == 'https' ) { | http| http. request( request) }
url = URI . parse( @url )
request = Net:: HTTP :: Put . new ( url)
request[ "Accept" ] = 'application/json'
request[ "Content-Type" ] = 'application/json'
request[ "Cache-Control" ] = 'no-cache'
request[ "Postman-Token" ] = '9e3622cd-fda5-458d-2521-325849546ef7'
request. body = "{\"name\": \"anonymous\", \"password\": \"obfuscated\"}"
response = Net:: HTTP . start( url. host, url. port, :use_ssl => url. scheme == 'https' ) { | http| http. request( request) }
五.response响应内容
uri = URI ( 'http://www.baidu.com' )
response = Net:: HTTP . get_response( uri)
puts "http版本: #{ response. http_version } "
puts "响应代码: #{ response. code } "
puts "响应信息: #{ response. message } "
puts "uri: #{ response. uri } "
puts "解码信息: #{ response. decode_content } "
puts response. body
response. header. each do | k, v|
puts " #{ k } : #{ v } "
end
六.发送https请求
http. use_ssl = true
http. verify_mode = OpenSSL:: SSL :: VERIFY_NONE
七.使用代理
proxy_ip = '47.115.5.19'
proxy_port = 16816
page_url = "https://dev.kuaidaili.com/testproxy"
uri = URI( page_url)
proxy = Net::HTTP::Proxy( proxy_ip, proxy_port)
req = Net::HTTP::Get.new( uri)
req[ 'User-Agent' ] = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
req[ 'Accept-Encoding' ] = 'gzip'
res = proxy.start( uri.hostname, uri.port, :use_ssl = > true ) do | http|
http.request( req)
end
八. Open使用代理
require "open-uri"
html = Nokogiri::HTML( open( address, 'User-Agent' = > agent, 'Cookie' = > cookie, :proxy = > "http://127.0.0.1:7890" ) .read)