Ruby1.9 利用GOOGLE BOT处理过多重定向

require 'net/http'
require 'uri'

$params = {
    'baseurl'   => 'http://www.XXX.com',
    'pageurl'   => '/XXX',
    'useragent' => 'GoogleBot', 
  } unless $params;  

def fetch(gameurl, limit = 10) # limit is up to you
  # You should choose a better exception.
  raise ArgumentError, 'too many HTTP redirects' if limit == 0
  #response = Net::HTTP.get_response(URI(uri_str)) 
  uri = URI(gameurl) #uri = URI.parse(gameurl) 
  http1 = Net::HTTP.new(uri.host, uri.port)   
  request1 = Net::HTTP::Get.new(uri.request_uri) 
  request1["User-Agent"] = $params['useragent']  
  request1["Accept"] = "*/*"    
  response = http1.request(request) 
  case response
  when Net::HTTPSuccess then
    return response
  when Net::HTTPRedirection then
    location = response['location']
    warn "redirected to #{location}"
    fetch(location, limit - 1)
  else
    response.value
  end
end

response=fetch($params['basicurl']+$params['pageurl'])
puts response.code

注释:
注释:
1 利用URI(gameurl)或者URI.parse(gameurl) 解析需要请求的页面
2 基于解析的uri建立http连接: http1 (new方法:如果不用会暂时关闭,后续使用会再次打开, 而start方法是一次性的,后面的代码块执行完之后就会关闭)
例如:

Net::HTTP.start(uri.host, uri.port) do |http|
  request = Net::HTTP::Get.new uri

  response = http.request request # Net::HTTPResponse object
end

3 创建requests内容
4 设置header参数: user-agent
5 基于已经建立的http链接:http1请求所需的内容 返回response

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值