通过 Socksify 的 Net::HTTP 适配器抓取 HTTP 页面
使用 Socksify 的 Net::HTTP 适配器,保留 URL 的请求目标,并读取返回的响应正文。
Socksify 为 Net::HTTP 提供了适配器。加载该适配器,并使用其文档记载的 socks_proxy 方法:
require 'socksify/http'
uri = URI('http://example.com/?view=compact')
Net::HTTP.socks_proxy('127.0.0.1', 1400)
.start(uri.host, uri.port) do |http|
response = http.get(uri.request_uri)
puts response.body
end
本地端口只是一个示例 SOCKS 端点。若要通过无需认证的 SOCKS 服务对允许抓取的公开网站进行测试,可以用 SOCKS 代理列表 中兼容的候选地址替换该主机和端口;请与已安装适配器支持的协议保持一致。request_uri 会保留路径和查询串,并在 URL 没有显式路径时补上一个斜杠。打印响应对象的检查输出与读取它的正文并不相同。
块形式会在块结束时关闭 HTTP 会话。本例针对 HTTP 目标;HTTPS 客户端还需要其常规的 TLS 配置。
较早的代码片段把工厂写成了 SOCKSProxy。项目当前的实现将它保留为别名,而其 README 使用的是 socks_proxy。请核对已安装的 Socksify 与 Ruby 组合,因为该适配器会与 Net::HTTP 的内部实现集成。