gpt4 book ai didi

ruby-on-rails - 无法在 ruby​​ 中通过 SSL 读取服务器响应

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:47 24 4
gpt4 key购买 nike

我的应用程序中有一个自定义类,它使用服务器创建套接字并从服务器读取输出。问题是输出不正确。因为我看到的输出是在 ssl 加密下进行的,当我阅读它时它是错误的。

这是我创建ssl连接的方法

  def self.feedback_connection
raise "The path to your pem file is not set. (APNS.pem = /path/to/cert.pem)" unless self.pem
raise "The path to your pem file does not exist!" unless File.exist?(self.pem)

context = OpenSSL::SSL::SSLContext.new
context.cert = OpenSSL::X509::Certificate.new(File.read(self.pem))
context.key = OpenSSL::PKey::RSA.new(File.read(self.pem), self.pass)

fhost = self.host.gsub('gateway','feedback')
puts fhost

sock = TCPSocket.new(fhost, 2196)
sock.setsockopt Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true
ssl = OpenSSL::SSL::SSLSocket.new(sock,context)
ssl.sync = true
ssl.connect

return sock, ssl
end

然后,在我的主要方法中

  def self.feedback
sock, ssl = self.feedback_connection

apns_feedback = []

while line = sock.gets # Read lines from the socket << the problem is here
line.strip!
f = line.unpack('N1n1H140')
apns_feedback << [Time.at(f[0]), f[2]]
end

ssl.close
sock.close

return apns_feedback
end

在行中:while line = sock.gets 如果我使用 sock.gets 我会得到编码的字符串。如果我使用 ssl.read(38) 这将返回 null。

我当时需要读取38个字节,在这个配置中:

1..4 => timestamp (big endian)
5..6 => length (big endian)
7..38 => token (binary) quoting: The token in binary format.

所以我的问题是:使用 ssl 我根本无法读取,使用 socket 每次我得到一个不同的字符串

我该怎么做才能阅读正确的信息?

最佳答案

找到问题了。

服务器没有发送任何东西,因为 ssl 协议(protocol),如果没有 ssl,ssl 中的空响应是不可读的。

检查后,一切正常。

关于ruby-on-rails - 无法在 ruby​​ 中通过 SSL 读取服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com