对于一个项目,我需要通过 Socks5 代理进行 HTTPS 调用,以便我可以访问客户的远程 API。我使用的原始代码是这样的:
url = "/proxyValidate?service=#{migration_station_verification_url}&ticket=#{service_ticket}"
if Rails.env == 'development'
uri = URI.parse(soe_cas_url + url)
Net::HTTP.SOCKSProxy('127.0.0.1', 1080).start(uri.host, uri.port) do |http|
res = http.get(uri.path)
doc = Nokogiri::XML(res)
doc.remove_namespaces!
doc.xpath('//sessionId').first.content
end
else
http = Net::HTTP.new(soe_cas_url)
http.use_ssl = true
req = Net::HTTP::Get.new(url)
res = http.request(req)
doc = Nokogiri::XML(res)
doc.remove_namespaces!
doc.xpath('//sessionId').first.content
end
目标是仅在开发环境中使用代理。当我使用代理拨打电话时,我收到错误消息:
错误的状态行:“<!DOCTYPE
谷歌搜索这表明我需要将use_ssl标志设置为 true,这在开发周期之外工作。使用 socksify 时没有这样的机制。如果我在 do 块内调用它,我会收到会话已启动的错误。在块外调用它会返回一个异常,即不存在这样的函数。
谁能告诉我如何通过 socksify 代理运行 SSL/HTTPS?
编辑:
我目前正在使用纯套接字来获得我想要的东西,使用以下代码:
socket = Socket::TCPSocket.open('127.0.0.1', 1080)
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
ssl_context.ca_file = File.join(Rails.root, 'ssl', 'cacert.pem')
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
ssl_socket.sync_close = true
ssl_socket.connect
request = "GET #{url} HTTP/1.1\r\nAccept: */*\r\nHost: #{soe_cas_url}"
ssl_socket.puts(request)
ssl_socket.puts("")
response = ""
while (line = ssl_socket.gets)
response << line
end
然而,这在ssl_socket.connect失败并出现以下错误:
ssl_connect 系统调用返回=5 errno=0 状态=sslv2/v3 读取服务器你好 a
我试过使用自签名证书,没有证书等,但似乎没有任何效果。我知道端点依赖于 staging environmnet 上的自签名证书。