[erlang-questions] inets, httpc, streaming, and non-2xx status codes

7 views
Skip to first unread message

Todd Bittner

unread,
Jun 10, 2011, 3:24:01 PM6/10/11
to erlang-q...@erlang.org
I'm trying to stream a response from a server via the inets client, using a call like this:

httpc:request(<URL Parameters,etc.>,[{headers_as_is, true},{sync,false},{stream,self}])),

200 responses seem to follow the proper work flow, but, when I receive a non-2xx response I either get messages like this:

(1) {http, {RequestId, {status_line(), headers(), body()}},

which seems to be expected as per this previous mailing list conversation - http://erlang.org/pipermail/erlang-bugs/2009-March/001222.html

or I'll get a message that just drops right into a stream atom clause:

(2) {http, {RequestId,stream,BinBodyPart}} ->

which is unusual, because I thought only (1) should be returned for non-2xx responses.  As a result, I have to first check to see if I receive a stream_start atom or a stream atom first to differentiate between 2xx and non-2xx responses.  This is always followed up with a {http, {RequestId, {status_line(), headers(), <<>>}}

I haven't been able to figure out what type of response causes to me get a type (1) message and what causes me to get a type (2).

In addition, sometimes (1) doesn't function as expected either - I'll receive a body that doesn't match the content length, and even if I try and drop into a receive to capture the rest of the body, I never get any messages.  Am I missing an option when calling the client?

I'm running 14A, for what it's worth.

Thanks,

Todd


Reply all
Reply to author
Forward
0 new messages