ruby - 如何通过 SOCKS 代理使用 Net::SMTP?
问题描述
我在 Ruby 2.6 中这样做:
require 'net/smtp'
Net::SMTP.start('smtp.gmail.com', 457).do |smtp|
smtp.helo('gmail.com')
end
现在我想做同样的事情,但是通过 SOCKS4/5 代理。我在文档中找不到任何东西。
解决方案
查看Net::SMTP的来源,它似乎没有对 SOCKS 代理的内置支持。
几个想法:
- 你的 Ruby 解释器是用 SOCKS 支持构建的吗?如果是,那么您将能够使用SOCKSSocket 类。创建 Net::SMTP 的子类并覆盖要使用的
tcp_socket
方法SOCKSSocket
,而不是TCPSocket
. - 使用ruby-proxifier gem(虽然它看起来很旧)。
- 在纯 Ruby 中重新实现
SOCKSSocket
(通过 SOCKS4 连接并不太难,SOCKS5 稍微复杂一些,请参阅此示例以供参考)或找到现有的实现(虽然我还没有找到)。
推荐阅读
- go - 在 Go 中使用输入和输出通道
- c# - Datatable 如何在 groupby 之后使用 LINQ,然后通过某些条件选择复制到新的数据表?
- python - Python 中的一个衬垫需要用 if-else 替换 for 循环以更改数据帧中的值
- angular - 角 ngOnInit()
- django - 如何使用Django外循环的值访问内循环
- java - Mysql 与 Spring Boot 连接困难
- amazon-web-services - 从现有 Amazon Aurora 实例创建新的加密实例
- java - 加载资源失败:net::ERR_FILE_NOT_FOUND 但数据已加载
- plone - 克隆 FormGen 覆盖主题行
- three.js - 三个 JS Material 看当前 div 背后