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

如何通过HTTPS从Erlang向Cloudant发出GET请求,https,erlang,couchdb,cloudant,Https,Erlang,Couchdb,Cloudant,我已经有一段时间没碰这个了。。。我可以在本地机器上获取并发布到couchdb,但现在我想切换到使用Cloudant,它需要通过https进行连接 我想了解发生了什么,所以现在我更愿意使用httpc或类似的工具,而不是couchbeam,但我似乎无法深入了解有关通过SSL连接的Erlang文档,任何示例都是通过普通HTTP。。。Cloudant似乎也没有任何特定于Erlang的文档 我已经看了这个主题,但给出的示例对我不起作用-我得到以下错误报告: 对于第3行,我还尝试了以下方法: 3> ht

我已经有一段时间没碰这个了。。。我可以在本地机器上获取并发布到couchdb,但现在我想切换到使用Cloudant,它需要通过https进行连接

我想了解发生了什么,所以现在我更愿意使用httpc或类似的工具,而不是couchbeam,但我似乎无法深入了解有关通过SSL连接的Erlang文档,任何示例都是通过普通HTTP。。。Cloudant似乎也没有任何特定于Erlang的文档

我已经看了这个主题,但给出的示例对我不起作用-我得到以下错误报告:



对于第3行,我还尝试了以下方法:

3> httpc:请求(head,{,“,[]},[],[])

3> httpc:request(get,{“”,[]},[{ssl,[{verify,0}]}],][])

3> httpc:request(get,{,“,[]},[],[])

我可以毫无问题地从浏览器连接到

很明显,我在这里遗漏了一些东西,但我一辈子都想不出是什么。我需要用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>
1>ssl:start()。
好啊
2> 其中是(ssl_sup)。
3> 主管:启动子项(ssl支持,{ssl\U服务器,{ssl\U服务器,启动链接,[]},永久,2000,工作,[ssl\U服务器]})。
{好的,}
4> 其中是(ssl_服务器)。

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

有一段时间一直想更新此序列。似乎我的CA证书可能不正确,因为在使用curl更新CA证书包并更新到Erlang R15B1之后,上面的示例开始对我起作用。所以这似乎是一个设置问题

需要注意的是,这里有一个httpc请求通过HTTPS从Cloudant实例获取所有数据库:

httpc:request
    (get, 
    {"https://" ++ username() ++ ":" ++ password() ++ "@" ++ username() ++ ".cloudant.com/_all_dbs", []}, 
    [{ssl,[{verify,0}]}], 
    []).

其中,函数username()和password()分别返回您的Cloudant用户名和密码。

hmmm。。。显然我的设置有问题,因为当我运行上面的:1>ssl:start()时,Erlang shell中发生了以下情况。ok 2>在哪里(ssl_-sup)。3> 主管:启动子项(ssl支持,{ssl\U服务器,{ssl\U服务器,启动链接,[]},永久,2000,工作,[ssl\U服务器]})。{error,{normal,{child,undefined,ssl_server,{ssl_server,start_link,[]},permanent,2000,worker,[ssl_server]}}}}4>然后您可以尝试将Erlang作为erl-ssl-edebug true启动,它将显示一些调试信息。我在这篇博文中为感兴趣的人详细介绍了我自己在这方面的经历:
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>
httpc:request
    (get, 
    {"https://" ++ username() ++ ":" ++ password() ++ "@" ++ username() ++ ".cloudant.com/_all_dbs", []}, 
    [{ssl,[{verify,0}]}], 
    []).