Net :: HTTP没有发送请求

时间:2013-10-25 22:30:06

标签: ruby connection-timeout net-http ruby-1.8.7

我在Ruby 1.8.7项目中有以下方法:

def self.ping_server
  request_data = get_request_data

  uri = 'another_server.our_company.com'
  https = Net::HTTP.new(uri)
  https.use_ssl = true
  path = "/our_service"
  data = request_data.to_json
  response = https.post(path, data, {'Content-Type' => 'application/json'})

  return response
end

每当我运行此方法时,我都会收到以下超时错误:

在128936ms完成500内部服务器错误

Errno::ETIMEDOUT (Connection timed out - connect(2)):
  lib/my_class.rb:51:in `ping_our_server'

我与有权访问another_server.our_company.com日志的同事核实。我的请求没有到达其他服务器。

我该怎样做才能让我的请求发挥作用?


编辑:进一步检查,这是我认为正在发生的事情(但我不完全确定):我们的其他服务器只接受HTTPS请求,但看起来我的请求正在由于某种原因通过HTTP发送。我需要添加一些内容以确保我的请求是通过HTTPS发送的吗?

1 个答案:

答案 0 :(得分:2)

根据this website,这是您发送HTTPS请求的方式:

require "net/https"
require "uri"

uri = URI.parse("https://secure.com/")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(uri.request_uri)

response = http.request(request)
response.body
response.status
response["header-here"] # All headers are lowercase

根据this website(从我的第一个链接链接),您还应该这样做以关闭net/https库中的漏洞:

  

要开始,您需要一个本地CA证书包,官方   curl站点维护最新的cacert.pem / ca-bundle.crt文件   如果您需要,可以包含所有主要证书。

     

接下来,在gem安装always_verify_ssl_certificates之后,你可以   启动并运行测试,简单如下:

require 'always_verify_ssl_certificates'
AlwaysVerifySSLCertificates.ca_file = "/path/path/path/cacert.pem"

http= Net::HTTP.new('https://some.ssl.site', 443)
http.use_ssl = true
req = Net::HTTP::Get.new('/')
response = http.request(req)
  

如果网站   证书不正确,此时会出现错误。如果没有,a   将返回合法的HTTP响应对象。