我有以下控制器 - courses-controller.rb:
class CoursesController < ApplicationController
def index
@search_term = params[:looking_for] || 'jhu'
@courses = Coursera.for(@search_term)
end
end
关注模型 - coursera.rb:
class Coursera
include HTTParty
base_uri 'https://api.coursera.org/api/catalog.v1/courses'
default_params fields: "smallIcon,shortDescription", q: "search"
format :json
def self.for term
get("", query: { query: term})["elements"]
end
end
关注view- index.html.erb:
<h1>Searching for - <%= @search_term %></h1>
<table border="1">
<tr>
<th>Image</th>
<th>Name</th>
<th>Description</th>
</tr>
<% @courses.each do |course| %>
<tr class=<%= cycle('even', 'odd') %>>
<td><%= image_tag(course["smallIcon"])%></td>
<td><%= course["name"] %></td>
<td><%= course["shortDescription"] %></td>
</tr>
<% end %>
</table>
但是,当我http://localhost:3000/courses/index时,我收到以下错误:
SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证失败
应用程序跟踪|框架跟踪|完整追踪
app / models / coursera.rb:9:for'
app/controllers/courses_controller.rb:4:in
索引&#39;
请告诉我该怎么做。什么都行不通!
答案 0 :(得分:0)
看起来它抱怨说没有有效的证书?如果是这种情况,您可以告诉HTTParty现在忽略无效的证书,如下所示:
class Coursera
include HTTParty
default_options.update(verify: false)
...
如果可行,那么您可能想弄清楚它认为证书无效的原因。
答案 1 :(得分:0)
上面发布的答案对你有用,因为你忽略了无效的证书。
这可能是解决这个问题的方法。但不建议这样做,因为你无法将这些代码用于生产。
因此,最好忽略仅仅用于开发环境。
只需将以下代码块添加到application.rb
的末尾即可
你应该好好去。
if Rails.env.development?
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
end
答案 2 :(得分:0)
base_uri 'https://api.coursera.org/api/catalog.v1/courses' ...
证书包含以下DNS名称:
$ openssl s_client -connect api.coursera.org:443 -tls1 -servername api.coursera.org | \
openssl x509 -text -noout | grep DNS
...
DNS:*.coursera.org, DNS:coursera.org
当您连接到https://localhost:3000/...
时,证书必须包含DNS名称 localhost
。
通用名称(CN)并不重要。重要的是主题备用名称(SAN),它们必须包含您用户与服务器联系的所有DNS名称。
另请参阅以下有关创建格式良好的SSL证书的信息: