我正在使用Mechanize来抓取网站,并且收到与主机名不匹配相关的错误。我发现问题的根源是在网站上使用的SNI我正在抓取,我想指定主机名以确保使用正确的证书。
这是我当前的设置:
agent = Mechanize.new
agent.user_agent = custom_user_agent
agent.verify_mode = OpenSSL::SSL::VERIFY_PEER
page = agent.get "website.com"
以下是我认为我需要添加的内容(或其他内容),以确保使用正确的证书:
OpenSSL::SSL::SSLSocket.hostname = "website.com"
在Mechanize中可以做到这一点,还是我需要弄清楚如何手动指定要使用的证书?
对于上下文,我了解VERIFY_NONE
解决方案,但考虑到它引入的漏洞,我宁愿避免使用它。
答案 0 :(得分:1)
您不需要指定主机名或使用Mechanize检查主机名。
Ruby的Net :: HTTP为你处理它:
https://github.com/ruby/ruby/blob/trunk/lib/net/http.rb#L928
如果主机名不匹配,将引发OpenSSL :: SSL :: SSLError异常。