如果任务只是检查 HTTP 响应并跟踪普通链接,并不总是需要完整的浏览器。Ruby Mechanize 会在执行这些请求的代理对象上暴露代理设置:

agent = Mechanize.new('office-route')
begin
  agent.set_proxy('proxy.example', 8080)
  page = agent.get('https://www.example.com/')
  puts page.code
ensure
  agent.shutdown
end

这里假设已经加载了 mechanize 库。对于无需代理认证的、获准的公开页面检查,HTTP 代理列表为示例提供了候选的主机/端口值。当端点需要时,proxy 方法还接受用户名和密码作为可选的第三、第四个参数。

对属于同一浏览会话的请求复用已配置好的代理对象。它除了网络设置,还会携带 Cookie 和浏览历史。更换出口代理本身并不会产生新的身份,也不会丢弃登录 Cookie。

如果有多个代理会话,应让每个会话拥有自己的代理对象,而不是在工作进行中切换同一个共享对象。该库还记录了在需要隔离 SSL 连接时使用的唯一连接名;示例中的构造器名称让这一选择变得明确。

按代理对相关 URL 检查进行分组,可以减少不必要的重新配置。请将结果与产生它的路由和 URL 关联起来,包括重定向和错误响应。

Mechanize 不会重现浏览器的 JavaScript 执行。当被测试的行为依赖脚本、渲染或浏览器特有的认证时,请使用真实浏览器。通过代理成功获取 HTTP 只回答了更窄的问题:这个代理对象能够发出那次请求。

相关文章