使用Net :: HTTP抛出Net :: HTTPBadResponse错误的API调用

时间:2014-05-05 08:55:21

标签: ruby-on-rails ssl net-http

我正在开发rails环境。我正在使用 Net :: HTTP 模块来调用外部API并获得响应。这在我当地的主机上工作正常。但是在暂存它时会抛出 Net :: HTTPBadResponse 错误。我的暂存是启用SSL的。这是不同的。提供下面的代码段和错误。

parameters = {'VirtualNumber' => '09845xxxxxx','Number[]' => "09878xxxxxx" }
x = Net::HTTP.post_form(URI.parse("https://example.com"), parameters)

Error:
Net::HTTPBadResponse (wrong status line: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">")

成功的结果将是XML格式。任何人都可以帮我解决这个问题。

谢谢你,
问候

1 个答案:

答案 0 :(得分:2)

问题是从启用了ssl的站点调用API。因此,在调用API时,我们需要启用ssl。并且需要提供基本身份验证。

parameters = {'VirtualNumber' => '09845xxxxxx','Number[]' => "09878xxxxxx" }
url = URI.parse("https://example.com")
request = Net::HTTP::Post.new(url.path)
request.basic_auth "user", "pass"
request.set_form_data(parameters)
sock = Net::HTTP.new(url.host, url.port)
if url.scheme == 'https'
  sock.use_ssl = true
end
response = sock.start {|http| http.request(request) }