https - 如何通过 HTTPS 从 Erlang 向 Cloudant 发出 GET 请求

标签 https erlang couchdb cloudant

一段时间以来,我一直对这个问题嗤之以鼻……我可以在本地计算机上获取并发布到 couchdb,但现在我想切换到需要通过 https 进行连接的 Cloudant。

我想了解发生了什么,所以现在更喜欢使用 httpc 或类似的东西,而不是,比如说 couchbeam,但我似乎无法穿透关于通过 SSL 连接的 Erlang 文档,并且任何示例都通过普通的 HTTP .. . Cloudant 似乎也没有任何特定于 Erlang 的文档。

我看过题目How do I do an HTTPS request with Erlang但给出的示例对我不起作用 - 我收到以下错误报告:

ฐ=ERROR REPORT==== 10-May-2011::10:40:26 ===
** Generic server <0.60.0> terminating 
** Last message in was {connect_and_send,
                           {request,#Ref<0.0.0.50>,<0.31.0>,0,https,
                               {"playground.cloudant.com",443},
                               "/",[],get,
                               {http_request_h,undefined,"keep-alive",
                                   undefined,undefined,undefined,undefined,
                                   undefined,undefined,undefined,undefined,
                                   undefined,undefined,undefined,undefined,
                                   undefined,undefined,
                                   "playground.cloudant.com",undefined,
                                   undefined,undefined,undefined,undefined,
                                   undefined,undefined,undefined,undefined,[],
                                   undefined,undefined,undefined,undefined,
                                   "0",undefined,undefined,undefined,
                                   undefined,undefined,undefined,[]},
                               {[],[]},
                               {http_options,"HTTP/1.1",infinity,true,
                                   {ossl,[{verify,0}]},
                                   undefined,false,infinity,false},
                               "https://playground.cloudant.com",[],none,[],
                               1305020425911,undefined,undefined}}
** When Server state == {state,undefined,undefined,undefined,undefined,
                            undefined,undefined,
                            {[],[]},
                            {[],[]},
                            undefined,[],nolimit,nolimit,
                            {options,
                                {undefined,[]},
                                0,2,5,120000,2,disabled,false,inet,default,
                                default,[]},
                            {timers,[],undefined},
                            httpc_manager,undefined}
** Reason for termination == 
** {{badmatch,{error,no_ssl_server}},
    [{ssl,old_connect,4},
     {httpc_handler,connect_and_send_first_request,3},
     {httpc_handler,handle_call,3},
     {gen_server,handle_msg,5},
     {proc_lib,init_p_do_apply,3}]}

和 Erlang shell 挂起......

这是我在 Erlang shell 中输入的代码:
Running Erlang

Eshell V5.8.3  (abort with ^G)

1> inets:start().

ok

2> ssl:start().

ok

3>  httpc:request(head, {"https://playground.cloudant.com", []}, [{ssl,[{verify,0}]}], []).

对于第 3 行,我还尝试了以下操作:

3> httpc:request(head, {"https://playground.cloudant.com ", []}, [], []).

3> httpc:request(get, {"https://playground.cloudant.com ", []}, [{ssl,[{verify,0}]}], []).

3> httpc:request(get, {"https://playground.cloudant.com ", []}, [], []).

我可以连接到 https://playground.cloudant.com浏览器没问题。

我显然在这里遗漏了一些东西,但我一生都无法弄清楚是什么。我需要用 SSL 做什么?我应该坐在特定位置的任何配置文件?任何帮助都感激不尽!

最佳答案

尝试这个:

1> ssl:start().
ok
2> whereis(ssl_sup).
<0.42.0>
3> supervisor:start_child(ssl_sup, {ssl_server, {ssl_server, start_link, []}, permanent, 2000, worker, [ssl_server]}).
{ok,<0.48.0>}
4> whereis(ssl_server).
<0.48.0>

它可能会为您提供其他信息。你的序列对我来说是开箱即用的。

关于https - 如何通过 HTTPS 从 Erlang 向 Cloudant 发出 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5948246/

相关文章:

Erlang (Elixir) Dialyzer - 令人困惑的父类(super class)型错误

erlang - 是什么让 Erlang 不适合计算昂贵的工作?

Python,CouchDb : how to Update already existing document by ID

couchdb - CouchApps 和用户身份验证

JSONLint 验证错误--预期 EOF

c# - 使用客户端证书 HTTPS 的移动与桌面身份验证

amazon-web-services - 在 Amazon EC2 服务器上获取 SSL/TLS 证书

scala - 用于 Ocaml 和其他语言的基于 Actor 的分布式并发库

scala - 如何从证书链、证书和私钥正确配置 HTTPS?阿卡 HTTP

apache - 更改 apache2 服务器的 ssl 端口。 (ERR_SSL_PROTOCOL_ERROR)