issue with http:request

Alexander Zhuravlev a.zhuravlev@REDACTED
Wed Feb 10 10:54:15 CET 2010


Hello,

It looks like there is some issue with http request handling in
http:request function or some other subsystem underneath.

Here is a test case:

Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

1> inets:start().
ok
2> % this one works as expected
2> http:request(head, {"http://google.com", []}, [{timeout, 100}], []). 
{error,timeout}
3> URL = [104,116,116,112,58,47,47,227,129,147,227,130,140,230,166,130,227,
3> 129,173,229,189,147,227,129,159,227,129,163,227,129,166,227,130,
3> 139,227,128,130,119,119,119,46,112,97,103,101,46,115,97,110,110,
3> 101,116,46,110,101,46,106,112,47,109,97,121,117,114,105,47,122,121,
3> 111,115,101,105,47,109,97,114,95,51,48,54,46,104,116,109,108].
[104,116,116,112,58,47,47,227,129,147,227,130,140,230,166,
 130,227,129,173,229,189,147,227,129,159,227,129,163,227|...]
4> http:request(head, {URL, []}, [{timeout, 100}], []).           

The latest request hangs indefinitely.
Request to the same URL (while being UTF-8 encoded) also hangs:

6> http:request(head, {"http://これ概ね当たってる。www.page.sannet.ne.jp/mayuri/zyosei/mar_306.html", []}, [{timeout, 100}], []).

Moreover, http_uri shows that both URLs are valid:

1> http_uri:parse(URL).
{http,[], [227,129,147,227,130,140,230,166,130,227,129,173,229,189,
             147,227,129,159,227,129,163,227,129,166,227,130|...],
	           80,"/mayuri/zyosei/mar_306.html",[]}

2>
http_uri:parse("http://これ概ね当たってる。www.page.sannet.ne.jp/mayuri/zyosei/mar_306.html").
{http,[],
      [12371,12428,27010,12397,24403,12383,12387,12390,12427,
             12290,119,119,119,46,112,97,103,101,46,115,97,110,110,101,
	            116,46|...], 80,"/mayuri/zyosei/mar_306.html",[]}


Our production system logs the following error to the console (however I do not see it when I run the
code in a new local erlang shell), I suppose it is connected to the issue above:

=CRASH REPORT==== 10-Feb-2010::12:25:09 ===
  crasher:
    initial call: httpc_handler:init/1
    pid: <0.18577.0>
    registered_name: []
    exception exit: badarg
      in function  gen_tcp:connect/4
      in call from httpc_handler:send_first_request/3
      in call from httpc_handler:init/1
    ancestors: [httpc_handler_sup,httpc_sup,inets_sup,<0.80.0>]
    messages: []
    links: [<0.86.0>]
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 233
    stack_size: 24
    reductions: 104
  neighbours:

=SUPERVISOR REPORT==== 10-Feb-2010::12:25:09 ===
     Supervisor: {local,httpc_handler_sup}
     Context:    child_terminated
     Reason:     badarg
     Offender:   [{pid,<0.18577.0>},
                  {name,undefined},
                  {mfa,
                      {httpc_handler,start_link,
                          [{request,#Ref<0.0.0.79940>,<0.18533.0>,0,http,
                               {[12371,12428,27010,12397,24403,12383,12387,
                                 12390,12427,12290,119,119,119,46,112,97,103,
                                 101,46,115,97,110,110,101,116,46,110,101,46,
                                 106,112],
                                80},
                               "/mayuri/zyosei/mar_306.html",[],get,
                               {http_request_h,undefined,"keep-alive",
                                   undefined,undefined,undefined,undefined,
                                   undefined,undefined,undefined,undefined,
                                   undefined,undefined,undefined,undefined,
                                   undefined,undefined,
                                   [12371,12428,27010,12397,24403,12383,12387,
                                    12390,12427,12290,119,119,119,46,112,97,
                                    103,101,46,115,97,110,110,101,116,46,110,
                                    101,46,106,112],
                                   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,[],
                                   undefined,false,infinity},
                               [104,116,116,112,58,47,47,12371,12428,27010,
                                12397,24403,12383,12387,12390,12427,12290,119,
                                119,119,46,112,97,103,101,46,115,97,110,110,
                                101,116,46,110,101,46,106,112,47,109,97,121,
                                117,114,105,47,122,121,111,115,101,105,47,109,
                                97,114,95,51,48,54,46,104,116,109,108],
                               [],none,[]},
                           {options,
                               {undefined,[]},
                               0,2,5,120000,2,disabled,false,inet,default,
                               default},
                           httpc_manager]}},
                  {restart_type,temporary},
                  {shutdown,4000},
                  {child_type,worker}]

-- 
Alexander Zhuravlev


More information about the erlang-questions mailing list