当前位置: 首页 > 知识库问答 >
问题:

Erlang HTTP问题

穆睿才
2023-03-14
hackney:start(),

{ok, _, _, Ref} = hackney:request(
  get, <<"http://www.youtube.com">>, [], <<>>, [{pool, default}]
),
{ok, Body} = hackney:body(Ref),
io:format("body: ~p~n~n", [Body]),

错误:

Error in process <0.361.0> on node 'cta_erlang_backend@127.0.0.1' with exit value:
{[{reason,undef},
  {mfa,{hello_handler,handle,2}},
  {stacktrace,[{hackney,start,[],[]},
               {hello_handler,handle,2,
                              [{file,"src/hello_handler.erl"},{line,18}]},
               {cowboy_handler,handler_handle,4,
                               [{file,"src/cowboy_handler.erl"},{line,111}]},
               {cowboy_protocol,execute,4,
                                [{file,"src/cowboy_protocol.erl"},
                                 {line,442}]}]},
  {req,[{socket,#Port<0.267>},
        {transport,ranch_tcp},
        {connection,keepalive},
        {pid,<0.361.0>},
        {method,<<"POST">>},
        {version,'HTTP/1.1'},
        {peer,{{10,0,0,1},40049}},
        {host,<<"10.0.0.103">>},
        {host_info,undefined},
        {port,8080},
        {path,<<"/">>},
        {path_info,undefined},
        {qs,<<>>},
        {qs_vals,undefined},
        {bindings,[]},
        {headers,[{<<"host">>,<<"10.0.0.103:8080">>},
                  {<<"connection">>,<<"keep-alive">>},
                  {<<"content-length">>,<<"4">>},
                  {<<"cache-control">>,<<"no-cache">>},
                  {<<"origin">>,
                   <<"chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm">>},
                  {<<"user-agent">>,
                   <<"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/39.0.2171.65 Chrome/39.0.2171.65 Safari/537.36">>},
                  {<<"content-type">>,<<"text/plain;charset=UTF-8">>},
                  {<<"accept">>,<<"*/*">>},
                  {<<"accept-encoding">>,<<"gzip, deflate">>},
                  {<<"accept-language">>,<<"en-GB,en-US;q=0.8,en;q=0.6">>}]},
        {p_headers,[{<<"connection">>,[<<"keep-alive">>]}]},
        {cookies,undefined},
        {meta,[]},
        {body_state,waiting},
        {buffer,<<"asdf">>},
        {multipart,undefined},
        {resp_compress,false},
        {resp_state,waiting},
        {resp_headers,[]},
        {resp_body,<<>>},
        {onresponse,undefined}]},
  {state,{state}}],
 [{cowboy_protocol,execute,4,[{file,"src/cowboy_protocol.erl"},{line,442}]}]}

=ERROR REPORT==== 19-Oct-2016::18:56:51 ===
Ranch listener my_http_listener had connection process started with cowboy_protocol:start_link/4 at <0.361.0> exit with reason:


{[{reason,undef},{mfa,{hello_handler,handle,2}},{stacktrace,[{hackney,start,[],[]},{hello_handler,handle,2,[{file,"src/hello_handler.erl"},{line,18}]},{cowboy_handler,handler_handle,4,[{file,"src/cowboy_handler.erl"},{line,111}]},{cowboy_protocol,execute,4,[{file,"src/cowboy_protocol.erl"},{line,442}]}]},{req,[{socket,#Port<0.267>},{transport,ranch_tcp},{connection,keepalive},{pid,<0.361.0>},{method,<<"POST">>},{version,'HTTP/1.1'},{peer,{{10,0,0,1},40049}},{host,<<"10.0.0.103">>},{host_info,undefined},{port,8080},{path,<<"/">>},{path_info,undefined},

{qs,<<>>},{qs_vals,undefined},{bindings,[]},{headers,[{<<“host”>>,<<“10.0.0.103:8080”>>},{<<“connection”>>,<<“keep-alive”>>},{<<“content-length”>>,<<“content-length”>>,<<“no-cache”>>,<<“origin”>>,<<“chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm”>>},{<<“user-agent”>>,<<“mozilla/5.0(x11;Linux X 86_64)AppleWebKit/537.36(KHTML,like Gecko)Ubuntu Chromium/39.0.2171.65 Chrome/39.0.2171.65 Safari/537.36”>>},{<<“Content-type”>>,<<“text/plain;charset=utf-8”>>},{<<“accept-encoding”>>,<<“/”>>},{<<“accept-encoding”>>,<<“gzip,deflate”>>},{<<“accept-language”>>,<<“en-gb,en-us;q=0.8,en;q=0.6”>>}]},{p_headers,[{<<“connection”>>},[<<“keep-alive”>>]}]},{cookies,未定义},{meta,[]},{body_state,等待},{buffer,<<“asdf”>>},{multipart,未定义},{resp_compress,false},{resp_state,等待},{resp_headers,[]},{respody,<<>>},{onresponse,未定义}]},{state,{state}}],[{cowboy_protocol,execute,4,[{file,“src/cowboy_protocol.erl”},{line,442}]}

hello_handler.erl:

-module(hello_handler).
-behaviour(cowboy_http_handler).

-export([init/3]).
-export([handle/2]).
-export([terminate/3]).

-record(state, {
}).

init(_, Req, _Opts) ->
    hackney:start(),
    {ok, Req, #state{}}.

handle(Req, State) ->
    {Method, Req2} = cowboy_req:method(Req),
    case Method of
        <<"POST">> ->
            {ok, _, _, Ref} = hackney:request(get, <<"http://www.youtube.com">>,
                [], <<>>, [{pool, default}]),
            {ok, Body} = hackney:body(Ref),
            io:format("body: ~p~n~n", [Body]),
            ResponseBody = <<"Hello Erl POST!">>;
        <<"GET">> ->
            ResponseBody = <<"Hello Erlang1!">>
    end,
    {ok, Req2} = cowboy_req:reply(200,
        [{<<"content-type">>, <<"text/plain">>}],
        ResponseBody,
        Req),
    {ok, Req2, State}.

terminate(_Reason, _Req, _State) ->
    ok.

共有1个答案

令狐辉
2023-03-14
{[{reason,undef},
  {mfa,{hello_handler,handle,2}},
    {stacktrace,[{hackney,start,[],[]},
           {hello_handler,handle,2,
                          [{file,"src/hello_handler.erl"},{line,18}]},
           {cowboy_handler,handler_handle,4,
                           [{file,"src/cowboy_handler.erl"},{line,111}]},
           {cowboy_protocol,execute,4,
                            [{file,"src/cowboy_protocol.erl"},
                             {line,442}]}]},

cowboy_handler.erl 111行崩溃,https://github.com/ninenines/cowboy/blob/1.1.x/src/cowboy_handler.erl#l111

原因:hello_handler:handle/2为undef

所以

 类似资料:
  • 问题内容: 包括: all Spring libs, Apache Tomcat 7.0 library 在构建路径中 但它仍然给出错误: 在“ org.sprintframework.web-3.1.0.M1.jar”中,我可以看到“ org.springframework.web.context.ContextLoaderListener”。 Google上的某个人说应该包含spring.ja

  • 问题内容: 我使用非常简单的代码返回XML 但是,出现以下错误 请帮忙。谢谢 问题答案: 运行时出现NoSuchMethodError表示你使用的库版本与生成代码所针对的版本不同。 在你的情况下,Spring是元凶。在运行时检查类路径上的内容,并确保以下各项: 版本与编译时间罐相同 如果存在多个版本,请删除不需要的版本

  • 问题内容: 我不明白注释和之间的实际区别是什么? 扩展名还是它们具有完全不同的含义?什么时候应该使用它们?在服务层中使用Spring ,在DAO 中使用javax? 谢谢回答。 问题答案: 几年前,Spring定义了自己的Transactional注释以使Spring bean方法具有事务性。 Java EE 7终于做了同样的事情,现在除了EJB方法外,还允许CDI bean方法是事务性的。因此,

  • 我在CentOS虚拟机中安装了RabbitMQ,该虚拟机的网络适配器被定义为Bridge。我正在尝试配置RabbitMQ管理,以便通过机器的IP地址访问WebApp。配置如下:

  • 这个FAQ的最新版本总是可以从Apache主站点得到,位于<http://httpd.apache.org/docs/2.2/faq/> 如果你的问题在这里没有找到答案,你也可以看看Apache 1.3 FAQ ,看你的问题是否在那里有了答案。 主题 背景 关于 Apache HTTP Server 的背景知识。 支持 我遇到问题该怎么办? 错误信息 这些错误信息是什么意思? 背景 什么是Apac

  • 发布问题 更新问题 设置问题悬赏 获取问题列表 获取一个问题详情 删除一个问题 获取用户发布的问题列表 发布问题 POST /questions 输入 字段 类型 描述 subject 字符串 必须,问题主题或者说标题,不能超过 255 字节 ,必须以 ? 结尾。(不区分全角或者半角) topics 数组 必须,绑定的话题,数组子节点必须符合 { "id": 1 } 的格式。 body 字符串

  • 问题内容: 我简直不敢相信我网站上正在发生的事情。当我添加此行时: 一切正常。如果我不这样做,CSS就会“混乱”,一切都会变得不同,布局也会变得“丑陋”。 这条线如何解决所有问题? 问题答案: 您正在将HTML与XHTML混合使用。 通常,声明用于区分HTMLish语言的版本(在这种情况下为HTML或XHTML)。 不同的标记语言将表现不同。我最喜欢的例子是。在浏览器中查看以下内容: XHTML

  • 我试图在fabric rocket chat上联系,但没有得到太多帮助,因此在SO上发布了它。我有以下疑问: 我们是否可以在链码内访问块高度(我知道这在客户端是可行的,但在链码内是否可能) 可以从链码中的正在进行的事务调用新事务吗? 想知道hyperledger Fabric中存储的数据的历史记录在哪里 我们可以根据链码中的transactionid进行查询吗? 在fabric链码中编写调度程序是